Я попадаю в более крупные структуры данных с Backbone и сталкиваюсь с ситуациями, когда данные будут хорошо представлены через CompositeViews; то есть CollectionViews с добавлением "добавленного пуха" вокруг них, таких как заголовки, кнопки и т.д.
Однако у меня много сложностей, связанных с CompositeViews внутри друг друга. Использование стандартного свойства itemView в CompositeView для отображения другого 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, я, безусловно, все уши: