Наскоро надстроих до 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"...), за да прихвана задействащото събитие.
Някаква помощ по въпроса?