我试图创建一个自定义的待办事项列表,松散地基于Backbone todoMVC教程应用程序。
我创建了CompositeView
,使用单独的ItemView
来显示集合。我的理解是,每当将新模型添加到CompositeView的集合中时,它将自动为该模型生成ItemView并将其添加到CompositeView的el
。
但是,这对我不起作用。我已确认模型是在数据库中创建的,但视图无法自动更新。刷新页面时我可以看到Todo。我甚至尝试设置collectionEvents
哈希来监视正在添加的任何模型,但这些方法(newTask,collectionFetched)从未触发过。
这是我的CompositeView代码:
app.Views.TodosCompositeView = Backbone.Marionette.CompositeView.extend({
template: '#todo-list-template',
childView: app.Views.TodoItemView,
childViewContainer: 'tbody',
emptyView: app.Views.TodoEmptyView,
initialize: function() {
this.collection = new app.Collections.Todos();
this.collection.on('reset', this.render, this);
this.collection.fetch();
},
collectionEvents: {
'add': 'newTask',
'reset': 'collectionFetched'
},
newTask: function() {
console.log('new todo added');
},
collectionFetched: function() {
console.log('collection was fetched');
}
我的路线中的show方法:
app.Views.todosListView = new app.Views.TodosCompositeView();
app.mainRegion.show(app.Views.todosListView);
一个类似的问题提到将集合作为复合视图的构造函数中的一个选项传递,即new app.Views.TodosCompositeView({collection:todos})
也没有帮助。