我正在通過Backbone進入更大規模的數據結構,並且遇到了通過CompositeViews可以很好地表示數據的場合;也就是CollectionViews,在它們周圍添加「添加絨毛」,比如標題,按鈕等等。如何使用Backbone.Marionette處理嵌套CompositeView?
但是,我在嵌套複合視圖的過程中遇到了很多困難。使用CompositeView上的標準itemView屬性來渲染另一個CompositeView似乎根本不會觸發。
假設我有一個父ItemView控件,實例化本身(以下Derick Bailey's example;假設這個頂層就是在收集初始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達到這個目標,我一定洗耳恭聽:
在SchedulerDetailCompositeView初始化函數中,您將顯式地爲this.collection賦值,即告訴複合視圖關於它處理的集合。像在[treeview](http://jsfiddle.net/derickbailey/AdWjU/)小提琴 – deven98602
這似乎沒有足夠的信息。即使在通過initialize方法分配集合之後,SchedulerDetailCompositeView上的appendHtml實際上也不會觸發。初始化確實,但appendHtml沒有。 –