У меня есть collectionview
ItineraryEditorView
, который меняется местами в области макета и из нее. Один и тот же экземпляр collectionView
заменяется с помощью region.show
вместо того, чтобы каждый раз создавать новый экземпляр для collectioView
. Метод рендеринга в коллекции вызывает метод delegateEvents()
.
ItineraryEditorView = Marionette.CollectionView.extend({
tagName: "div",
emptyView: EmptyItineraryDayView,
itemView: ItineraryDayView,
initialize: function (options) {
},
render: function() {
Marionette.CollectionView.prototype.render.apply(this);
this.delegateEvents();
},
});
Вид заменяется закрытием области:
plannerLayout.itineraryEditorRegion.close();
Обмен в представлении:
itineraryEditorView.delegateEvents();
plannerLayout.itineraryEditorRegion.show(itineraryEditorView);
Удаление модели выполняется путем прослушивания всплывающего события с itemView
по collectionView
(работает, здесь нет проблем)
itineraryEditorView.on("itemview:delete:day", function(childView, model) {
days.remove(model); //days coll is passed in to coll view on instance creation
holiday.save();
});
Я ожидаю, что этого будет достаточно, чтобы обеспечить удаление/закрытие дочернего элемента itemViews
в представлении коллекции при удалении модели из базовой коллекции дней. Я вижу, что коллекция фактически изменена и сохранена на сервере, однако представление коллекции не изменено. Этот сценарий, конечно, работает, когда представление коллекции заменяется в первый раз. Колл. представление обновляется после того, как я повторно посещу другую вкладку и вернусь на эту вкладку (таким образом, вся коллекция отображается - подтверждение изменения/удаления)
Каков наилучший способ обойти эту проблему? Если я воссоздаю экземпляр представления коллекции, это приводит к потере других дескрипторов в коде.