Backbone Collection有多个型号?

use*_*947 13 javascript backbone.js backbone.js-collections

我正在学习Backbone.

我想创建一个包含不同模型的列表,具有不同的属性.

例如,按任何顺序列出文件夹内容,其中可包括类型文件的模型和类型文件夹的模型.

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

folder : {
  title : "",
  date : "",
  haminahamina : ""
}
Run Code Online (Sandbox Code Playgroud)

在Backbone中表示这个的正确方法是什么?是否可以使用多个模型的单个集合?

Luk*_*kas 26

创建其他模型继承自的基本模型:

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
});
Run Code Online (Sandbox Code Playgroud)

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

var DataCollection = Backbone.Collection.extend({
    model: DataModel
});
Run Code Online (Sandbox Code Playgroud)


小智 17

你也可以做骨干方式.查看docs backbone集合

基本上你会创建不同的模型,在这种情况下添加一个tie breaker属性,称为"type".

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);
            case 'folder':
                return new folder(model, options);
        }
    }
});

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

  • 我喜欢这种方法,它不仅是"骨干方式",而且它不需要上面提到的额外的业务逻辑@dennis,事实上你根本不需要任何变通办法,因为它会像你期望的那样工作至.另外,我相信你的意思是:`var fs = Backbone.Collection.extend({` (3认同)