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

标签 backbone.js

我看到有一些技术可用于在 Backbone 中建立深层模型,但是单个模型的分层集合怎么样?

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

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

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

最佳答案

看看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 时,您将不得不在那里生成所有子模型和集合,以使其全部正常工作。

关于backbone.js - 我们如何在 Backbone.js 中表示深层模型层次结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11128325/

相关文章:

javascript - 如何像 JSON 一样通过这些路径获取嵌套的 Backbone 模型和集合?

javascript - 在 Backbone 路由器的一次操作中绑定(bind)多个 View

javascript - 什么时候应该在 JavaScript 中使用 MVC 框架?

javascript - backbone js this.model.get 不是一个函数

javascript - 为什么大家还在用render方法构建父 subview 呢?

javascript - BackboneJS Radio channel 多次触发事件

Backbone.js - fetch 方法不会触发重置事件

javascript - Backbone.view选项错误

backbone.js - RequireJS - 我是否必须为子类重新导入以前需要的文件

javascript - 过滤集合不起作用