【发布时间】:2016-11-17 04:58:42
【问题描述】:
我有几个模型,它们有自己的 url/api 可以获取。
我想把它们收藏起来。
- 听起来是个好主意吗?
- 您将如何获取它们? (我只是想从集合中获取我想要更新的模型然后获取它)
如果您有任何理论阅读/建议,请告诉我您的想法。
【问题讨论】:
标签: javascript backbone.js backbone.js-collections
我有几个模型,它们有自己的 url/api 可以获取。
我想把它们收藏起来。
如果您有任何理论阅读/建议,请告诉我您的想法。
【问题讨论】:
标签: javascript backbone.js backbone.js-collections
集合可以包含任何原始对象或从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'
}]);
查看关于集合中多个模型的类似问题:
【讨论】: