骨干集合与多个模型?
我正在学习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
选项和idAttribute
, idAttribute
。 在这种情况下,您需要:
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?