【问题标题】:How can we represent deep model hierarchies in Backbone.js我们如何在 Backbone.js 中表示深层模型层次结构
【发布时间】:2012-06-23 02:34:25
【问题描述】:

我看到在 Backbone 中可以使用一些技术来建立深度模型,但是单个模型的分层集合呢?

一个明显的例子是类别树。所以,我们可以有一个类别模型,它有几个属性,“名称”、“类型”、“颜色”等等。

我们使用的是 js,而不是关系型 db 样式的父 ID,因此我们希望将数据表示为 json。

是否可以利用主干来支持(可能通过增加集合)包含树中单个模型实例的数据结构(这样模型和子模型都是同一模型的所有实例)?

【问题讨论】:

    标签: backbone.js


    【解决方案1】:

    看看Backbone-Relationalsupermodel.js

    这些项目提供了比默认实现更好的模型嵌套形式。

    我们只是嵌套 Backbone 模型,例如:

    var MyModel = Backbone.Model.extend({});
    var MySubModel = Backbone.Model.extend({});
    
    var model = new MyModel({submodel: new MySubModel({color: 'blue'})});
    

    我们覆盖toJSON 方法:

    // nested models!  Might just override the internal representation of this...
    _.extend(Backbone.Model.prototype, {
      // Version of toJSON that traverses nested models
      toJSON: function() {
        var obj = _.clone(this.attributes);
        _.each(_.keys(obj), function(key) {
          if(!_.isUndefined(obj[key]) && !_.isNull(obj[key]) && _.isFunction(obj[key].toJSON)) {
            obj[key] = obj[key].toJSON();
          }
        });
        return obj;
      }
    });
    
    _.extend(Backbone.Collection.prototype, {
      // Version of toJSON that traverses nested models
      toJSON: function() {
        return this.map(function(model){ return model.toJSON(); });
      }
    });
    

    因此,当我们嵌套模型时,JSON 表示看起来是正确的。不过,您必须注意模型上的 parse 方法 - 当您从服务器取回 JSON 时,您将必须在那里生成所有子模型和集合,以使其正常工作。

    【讨论】:

    • 是的,第一个toJSON 方法可能更适合写成if(key instanceof Backbone.Model) 或类似的东西......
    • 谢谢.. 如果我们在一个请求中从服务器检索整个树作为 json.. 我们如何一次将其全部实例化?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-20
    • 1970-01-01
    • 1970-01-01
    • 2014-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多