2

我正在尝试创建一个骨干客户端应用程序。我在启动时从服务器接收到一个 json 对象列表,该列表将是从服务器公开的可能表的列表,以及它们的结构。例如客户、订单、发票、员工

我想根据从服务器接收到的数据动态创建模型、集合和视图。

只有当我收到加载的 json 时,我才会知道模型应该是什么以及模型之间的关系应该是什么。

例如,客户结构可能是 Id、CustomerName、Address、Contact Numbers。订单结构可能是 Id、CustomerId、OrderDate、Amount 等

通过动态构建模型、集合、视图、控制器,理论上我可以在另一台服务器的启动点上为我提供一组完全不同的表,例如:电影、演员等及其结构。

此外,如果添加了其他字段,我不必再次更改客户端代码。例如,客户表可能包含一个名为 ContactPerson 的新字段

请帮助我,因为我在主干上看到的所有示例都是基于预先在客户端静态定义模型。因此,为客户、订单、发票、员工等创建模型、集合和视图。

最好的祝愿,

安迪

4

2 回答 2

2

正如评论中已经提到的,Backbone 模型本质上是动态的。所以这是完全有效的,例如:

// A example dataset, this could be returned as JSON from the server
var jsonDataA = [
    {
        name: "Foo",
        title: "Bar"
    },
    {
        name: "a",
        title: "b"
    }
],
// A different example dataset
jsonDataB = [
    {
        make: "X",
        model: "Y"
    },
    {
        make: "Z",
        model: "ZZ"
    }
],

MyModel = Backbone.Model.extend({
    /* Empty Model definition */    
}),

MyCollection = Backbone.Collection.extend({
    model: MyModel 
}),

collection = new MyCollection();

collection.reset(jsonDataA);
console.log(collection.models);

collection.reset(jsonDataB);
console.log(collections.models);

在这里,我重用了相同的Collection定义Model来存储完全不同的数据集。

于 2013-09-03T10:48:10.243 回答
1

一部分是原始数据,另一部分是它的关系。您还需要传输包含类型及其关系的元数据。模型属性将自动填充。

从您的元数据可以构造一个简单的对象,其中键描述一个实体,例如:

var entites = {};
entities["Customer"] = Backbone.Model.extend({
    /* Model definition based on metadata */    
});
var parametersFromServer = {name: "John Doe"};
var customer = new entities["Customer"](parametersFromServer);

对于建立关系,我建议使用BackboneRelational 插件

于 2013-09-03T12:13:55.750 回答