我正在学习Backbone。
我想创建一个列表,其中可以包含不同的模型,具有不同的属性。
例如,以任意顺序列出文件夹内容,其中可能包括类型为file的模型和类型为文件夹的模型。
file : {
title : "",
date : "",
type : "",
yaddayadda : ""
}
folder : {
title : "",
date : "",
haminahamina : ""
}在Backbone中表示这一点的正确方式是什么?可以有多个型号的单个集合吗?
发布于 2013-01-11 01:47:24
创建您的其他模型继承的基础模型:
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
});发布于 2014-07-27 15:45:13
你也可以用主干的方式来做。查看文档backbone collection
基本上,您将创建不同的模型,添加一个平局断路器属性,在本例中为"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'}
]);发布于 2016-02-24 21:32:45
在这种情况下,Backbone documention不完整。当与merge:true选项和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
});https://stackoverflow.com/questions/14263765
复制相似问题