【问题标题】:Backbone.js Dynamic model creation based on JSON received from the serverBackbone.js 基于从服务器接收到的 JSON 创建动态模型
【发布时间】:2013-09-03 20:13:55
【问题描述】:

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

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

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

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

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

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

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

祝你好运,

安迪

【问题讨论】:

  • 结构也是动态的?
  • 是的,但它是从服务器的 json 定义的

标签: backbone.js


【解决方案1】:

正如 cmets 中已经提到的,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 定义来存储完全不同的数据集。

【讨论】:

  • 可能有多个相关模型,因此可能有多个集合。例如。可能有 100 个对象/表的模型及其关系,例如客户有订单、发票、员工、会计交易等。每一个都有一个模型、一个集合以及一些关系和路线。我不想将集合重置为其他内容,因为相关集合中的视图可能都显示在浏览器中
【解决方案2】:

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

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

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

【讨论】:

  • 我假设我可以对 BackboneRelational 做同样的事情,我可以从我的元数据中获取关系、事件、路由等?
  • 在 JSON 中定义它们、模型属性、它们的关系和路由
  • 对于事件我会做广义事件,因为它们不能在 JSON 中传输
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-14
  • 1970-01-01
  • 2018-01-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多