我有几个模型都有自己可以获取的url / api。
我想将它们保存在一个系列中。
如果您有任何理论上的阅读/建议,请告诉我您的想法。
答案 0 :(得分:3)
集合可以包含任何原始对象或从Backbone.Model
派生的任何模型。只有当您有一个返回对象数组的API端点时,才能获取集合。
如果您想要获取特定型号,可以保留对其的引用,或仅在集合中get
,然后在其上调用fetch
。
如果发生id
碰撞,可能会导致问题,其中相同的ID被视为相同的模型并合并在一起。
var book = new Book({ id: 1, title: "My Book" }),
note = new Note({ id: 1, title: "note test" });
var collection = new Backbone.Collection([book, note]);
console.log(collection.length); // 1
避免id
碰撞的方法:
制作多模型集合的方法是使用model
property作为函数。虽然默认情况下它不会阻止id
碰撞。
var BooksAndNotes = Backbone.Collection.extend({
/**
* Different models based on the 'type' attribute.
* @param {Object} attrs currently added model data
* @param {Object} options
* @param {Backbone.Model} subclass dependant of the 'type' attribute.
*/
model: function ModelFactory(attrs, options) {
switch (attrs.type) {
case "book":
return new Book(attrs, options);
case "note":
return new MTextSession(attrs, options);
default:
return new Backbone.Model(attrs, options);
}
},
// fixes this.model.prototype.idAttribute and avoids duplicates
modelId: function(attrs) {
return attrs.id;
},
});
var collection = new BooksAndNotes([{
title: "My Book",
type: 'book'
}, {
title: "note test",
type: 'note'
}]);
查看有关集合中多个模型的类似问题: