Backbone.js基于从服务器接收的JSON创建动态模型

时间:2013-09-03 10:31:20

标签: backbone.js

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

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

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

E.g。客户结构可能是Id,客户名称,地址,联系号码。 订单结构可能是Id,CustomerId,OrderDate,Amount 等

通过动态构建模型,集合,视图和控制器,理论上我可以在另一台服务器上启动点,这可能会给我一组完全不同的表,例如:电影,演员等......结构。

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

的新字段

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

祝福,

安迪

2 个答案:

答案 0 :(得分: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);

在这里,我重复使用相同的CollectionModel定义来存储完全不同的数据集。

答案 1 :(得分: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 plugin