var Book = Backbone.Model.extend({
title: "Moby Dick"
});
var Collection = Backbone.Collection.extend({
model: Book
});
var Library = {
address: '45th Street',
collection: Collection
};
const FooCollection = Backbone.Collection.extend({
initialize: function(models, attributes) {
attributes.log && console.log('foo!'); // Or set attributes on 'this', etc
}
});
// Passing null for first arg, which is optionally an array of models
// to initialize the collection with
const fooCollection = new FooCollection(null, { log: true } );
5条答案
按热度按时间yvfmudvl1#
只是
.extend
集合具有 meta数据存储功能。可能有更好的地方来存储“特定” meta数据,但这完全取决于元数据是什么。
用于存储泛型 meta数据的扩展集合构造函数用一个方法来做处理,应该行得通。
要注意,如果需要存储这些 meta数据并从服务器加载,那么您手头上的任务就更大了。
rjjhvcjd2#
最好完全按照预期的方式使用Collection:(朱利安已经在OP上评论过了,我想给予一下为什么我认为他是对的)
假设您正在考虑一个Book(model)的Library(collection),就像在Backbone的文档示例中一样。您已经获得了关于您想要存储的库的 meta信息,比如这个图书库所在的地址,这是有意义的。
诀窍是不要把它看作 meta信息,你有一个图书馆,它有很多属性,其中之一就是它的藏书。
在这个例子中,我把Library定义为一个普通的JavaScript对象。显然,你也可以把Library定义为一个模型,这样它就有了所有的 Backbone.js 功能。我的观点是,你需要用一种更现实的方式来表示现实,退一步看,你想分配给Collection的额外属性实际上是上一级对象的兄弟属性:在本例中为库。
lvmkulzt3#
我用事件触发升级了Raynos的方法,所以我们可以绑定到集合的属性更新。
s1ag04yj4#
使用@Raynos解决方案的
meta
函数时,只有一个参数,我无法使用。因此,我使用了以下代码:希望能帮上忙。
q3aa05255#
我已经阅读了其他的答案和评论,虽然我很欣赏将集合 Package 在模型中可能是绝对最干净的方式的想法,但我发现它在99.9%的时间里绝对是矫枉过正的。
多年来一直这样做,从来没有遇到过任何问题/缺点。