我正在使用 Backbone 进入更大规模的数据结构,并且遇到了通过 CompositeViews 可以很好地表示数据的情况;也就是说,CollectionViews 在它们周围添加了“添加绒毛”,例如标题、按钮等。
但是,我在将 CompositeView 相互嵌套时遇到了很多困难。使用 CompositeView 上的标准 itemView 属性来呈现另一个 CompositeView 似乎根本没有触发。
假设我有一个父 ItemView,这样实例化(按照Derick Bailey 的示例;假设此顶层是fetch()
调用集合上的初始值的位置):
var User = Backbone.Model.extend({});
var UserCollection = Backbone.Collection.extend({
model: User
});
var userList = new UserCollection(userData);
var schedulerCompositeView = new SchedulerCompositeView({
collection: userList
});
schedulerCompositeView.render();
this.ui.schedulerWidget.html(schedulerCompositeView.el);
SchedulerCompositeView看起来像这样:
return Backbone.Marionette.CompositeView.extend({
template: Handlebars.compile(schedulerCompositeViewTemplate),
itemView: SchedulerDetailCompositeView,
appendHtml: function (collectionView, itemView) {
collectionView.$("#schedulerGroups").append(itemView.el);
}
});
最后,SchedulerDetailCompositeView:
return Backbone.Marionette.CompositeView.extend({
template: Handlebars.compile(schedulerDetailCompositeViewTemplate),
itemView: SchedulerDetailItemView,
appendHtml: function (collectionView, itemView) {
collectionView.$("#schedulerDetailStops").append(itemView.el);
}
});
SchedulerDetailCompositeView 永远不会被实例化;事实上,它的appendHtml()
方法似乎根本不会触发。
显然这里缺少一些其他信息;显然目的是将集合/模型传递给 SchedulerDetailCompositeView,但由于嵌套的 CompositeViews,我不确定这样做的正确技术是什么。
作为参考,这是我试图实现的结构的粗略模型;如果可能有比嵌套 CompositeViews 更好的方法来实现这个目标,我当然会全神贯注: