私は Backbone を使用して大規模なデータ構造に取り組んでおり、CompositeViews を介してデータが適切に表現される場合に出くわしています。つまり、ヘッダー、ボタンなど、周囲に「毛羽立ち」が追加された CollectionViews です。
ただし、 CompositeViews を互いに入れ子にするのは非常に困難です。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 よりもこの目標を達成するためのより良い方法があるかもしれない場合、私は確かにすべての耳です: