骨干集合与多个模型?

我正在学习Backbone。

我想创建一个可以包含不同模型并具有不同属性的列表。

例如,以任何顺序列出文件夹内容,其中可能包括文件类型的文件夹和文件夹类型的文件夹。

file : {
  title : "",
  date : "",
  type : "",
  yaddayadda : ""
}

folder : {
  title : "",
  date : "",
  haminahamina : ""
}

在Backbone中表示这种方式的正确方法是什么? 是否有可能拥有多个模型的单个集合?


创建一个其他模型继承的基础模型:

var DataModel = Backbone.Model.extend({
    // Whatever you want in here
});

var FileModel = DataModel.extend({
    // Whatever you want in here
});

var FolderModel = DataModel.extend({
    // Whatever you want in here
});

并使集合的model类型成为相同的基本模型:

var DataCollection = Backbone.Collection.extend({
    model: DataModel
});

你也可以做它的骨干方式。 查看文档骨干收集

基本上你会创建不同的模型,在这种情况下添加一个tie breaker属性,说“类型”。

var file = Backbone.Model.extend({
        defaults: {
            // will need to include a tie breaker attribute in both models
            type: 'file'
        }
    }),
    folder = Backbone.Model.extend({
        defaults: {
            // tie breaker
            type: 'folder'
        }
    });

var fs = Backbone.Collection.extend({
    model: function(model, options) {
        switch(model.type) {
            case 'file':
                return new file(model, options);
                break;
            case 'folder':
                return new folder(model, options);
                break;
        }
    }
});

// after that just add models to the collection as always
new fs([
    {type: 'file',name: 'file.txt'},
    {type: 'folder',name: 'Documents'}
]);

在这种情况下,主干文档不完整。 使用merge:true选项和idAttributeidAttribute 。 在这种情况下,您需要:

var ModelFactory = function (attr, options) {
  switch (attr.type) {
    case 'file':
      return new file(attr, options);
    case 'folder':
      return new folder(attr, options);
  }
};
ModelFactory.prototype.idAttribute = '_id';

var fs = Backbone.Model.extend({
   model: ModelFactory
});
链接地址: http://www.djcxy.com/p/67141.html

上一篇: Backbone Collection with multiple models?

下一篇: Maximum call stack size exceeded in saving model collection backbone.js?