我正在尝试创建一个骨干客户端应用程序。我在启动时从服务器接收一个json对象列表,它将是从服务器公开的可能表的列表及其结构。例如。客户,订单,发票,员工
我想根据从服务器收到的数据动态创建模型,集合和视图。
只有当我收到负载的json时,我才知道模型应该是什么以及模型之间的关系应该是什么。
E.g。客户结构可能是Id,客户名称,地址,联系号码。 订单结构可能是Id,CustomerId,OrderDate,Amount 等
通过动态构建模型,集合,视图和控制器,理论上我可以在另一台服务器上启动点,这可能会给我一组完全不同的表,例如:电影,演员等......结构。
此外,如果添加了其他字段,我不必再次更改客户端代码。例如。客户表可能包含一个名为ContactPerson
的新字段请帮助我,因为我在骨干网上看到的所有示例都是基于在客户端静态定义模型。因此,为客户,订单,发票,员工等创建模型,集合和视图等。
祝福,
安迪
答案 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);
在这里,我重复使用相同的Collection
和Model
定义来存储完全不同的数据集。
答案 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。