我正在尝试将集合视图嵌套到模型视图中。
为了做到这一点,我使用了Backbone的Marionnette Composite View和followed that tutorial
最后,他初始化嵌套的集合视图,如下所示:
MyApp.addInitializer(function(options){
var heroes = new Heroes(options.heroes);
// each hero's villains must be a backbone collection
// we initialize them here
heroes.each(function(hero){
var villains = hero.get('villains');
var villainCollection = new Villains(villains);
hero.set('villains', villainCollection);
});
// edited for brevity
});
如果不使用Marionette的addInitalizer,你会如何做同样的事?
在我的项目中,我正在从服务器中处理数据。当我尝试做类似的事情时:
App.candidatures = new App.Collections.Candidatures;
App.candidatures.fetch({reset: true}).done(function() {
App.candidatures.each(function(candidature) {
var contacts = candidature.get('contacts');
var contactCollection = new App.Collections.Contacts(contacts);
candidature.set('contacts', contactCollection);
});
new App.Views.App({collection: App.candidatures});
});
我收到了来自该系列的“未定义选项”:
App.Collections.Contacts = Backbone.Collection.extend({
model: App.Models.Contact,
initialize:function(models, options) {
this.candidature = options.candidature;
},
url:function() {
return this.candidature.url() + "/contacts";
}
)};
答案 0 :(得分:0)
这是因为当您创建contactCollection
时,您没有在candidatures
对象中提供options
个集合。您需要将联系人集合初始化代码修改为:
initialize:function(models, options) {
this.candidature = options && options.candidature;
}
这样candidature
属性将被设置为提供的值(如果未提供,则为undefined
)。
然后,您仍然需要在实例化集合时提供信息:
App.candidatures.each(function(candidature) {
var contacts = candidature.get('contacts');
var contactCollection = new App.Collections.Contacts(contacts, {
candidature: candidature
});
candidature.set('contacts', contactCollection);
});
P.S。:我希望你发现我的博客文章很有用!