//文件一
//如何在ChoicesModel setnextOne
函数(对象)中调用choicesCollection default
var ChoicesModel = Backbone.Model.extend({
defaults: function() {
// this.collection ??
return {
seq_id: choicesCollection.setnextOne(),
subject: ""
};
},
initialize: function() {
console.log(this);
if (!this.get("seq_id")) {
this.set({"seq_id": this.defaults().seq_id});
}
}
});
//文件二
var ChoicesCollection = Backbone.Collection.extend({
model:ChoicesModel,
setnextOne: function() {
if (!this.length) return 0;
return +this.last().get('seq_id') + 1;
},
// sort
comparator: function(choice) {
return choice.get('seq_id');
}
});
//文件三
var choicesCollection = new ChoicesCollection();
答案 0 :(得分:1)
更深入地了解Manikandan的答案......
如果查看骨干代码,您会看到以下内容(我删除了一些内容):
var View = Backbone.View = function(options) {
options || (options = {});
_.extend(this, _.pick(options, viewOptions));
};
// List of view options to be merged as properties.
var viewOptions = ['model', 'collection', 'el', 'id', 'attributes', 'className', 'tagName', 'events'];
正如你可以看到_pick用于从传入的选项中列出一组属性的子列表。然后将View原型扩展为对这些属性进行扩展(如果它们已经被传递)。
简而言之,如果您将这些属性作为选项传递,则会自动将以下属性抛出到您的视图中:
model,collection,el,id,attributes,className
答案 1 :(得分:0)
根据主干documentation,您应该在将模型添加到集合后通过this.collection访问集合。或者,您需要在创建模型时发送收集选项。