我正在使用Backbone进入更大规模的数据结构,并遇到通过CompositeViews很好地表示数据的场合;也就是说,CollectionViews在它们周围增加了“添加绒毛”,例如标题,按钮等。
但是,我在将CompositeViews嵌套在一起时遇到了很多困难。使用CompositeView上的标准itemView属性来渲染另一个CompositeView似乎根本没有触发。
假设我有一个 父ItemView,实例化如下(以下 德里克贝利的例子;假设这个顶级是初始的 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,我当然都是耳朵: