Недавно я обновился до Marionette 2.0.3.
Я понял, что получаю
ViewDestroyedError: невозможно использовать представление, которое уже было уничтожено.
После поиска этой ошибки я понял, что это связано с повторным рендерингом моего представления.
Ниже мой текущий код:
View.ElementPanel = Marionette.ItemView.extend({
//shorten as example
triggers: {
'click .js-show': "element:show",
},
initialize: function() {
this.listenTo(this.model, 'change',this.render);
},
})
var elementsPanelView = new View.ElementsPanel({
collection: elements
});
activityView.elementsListPanel.show(elementsPanelView);
elementsPanelView.on("childview:element:show", function(args, element) {
LessonManager.trigger("element:show", activityView.elementPanel, activity, element);
});
я понял, что ссылка на представление уничтожается при повторном рендеринге модели при изменении атрибута. Поэтому рендеринг прослушивателя elementsPanelView.on("childview:element:... ) завершается ошибкой, так как elementsPanelView по существу уничтожается при изменении моей модели.
Я понял из этого поста на github https://github.com/marionettejs/backbone.marionette/issues/1510, что я не должен хранить ссылку на представление, так как это считается плохим кодом. Однако это означало бы, что я не смог бы обрабатывать события триггера, поскольку я использовал ссылку на представление elementsPanelView.on("childview:element:show"... ) для перехвата события триггера.
Любая помощь в этом?