我们如何在Backbone.js中表示深层模型层次结构

hac*_*ack 6 backbone.js

我看到有一些技术可以在Backbone中使用深层模型,但是单个模型的层次化集合怎么样?

一个明显的例子是类别树.所以,我们可以有一个类别模型,它具有一些属性,"名称","类型","颜色"等等.

我们使用js,而不是拥有关系数据库样式的父ID,所以我们希望数据表示为json.

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

tko*_*one 8

看看Backbone-Relationalsupermodel.js.

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

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

var MyModel = Backbone.Model.extend({});
var MySubModel = Backbone.Model.extend({});

var model = new MyModel({submodel: new MySubModel({color: 'blue'})});
Run Code Online (Sandbox Code Playgroud)

我们覆盖了这些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(); });
  }
});
Run Code Online (Sandbox Code Playgroud)

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

  • 谢谢..如果我们在一个请求中从服务器检索整个树作为json ..我们如何一次性实例化它? (2认同)