Когда ItemView прослушивает модель, отличную от его модели (this.model), мне просто нужно отключить слушатель в удалить функции? И установите их ссылку на null? Интересно, будет ли объект ItemView безопасным образом уничтожен или если у меня возникнут проблемы позже, когда будет создано или уничтожено множество просмотров, подобных этому?марионетки JS: Правильно ясно ItemView при прослушивании других типовых событий
Пример:
var FriendListItemView = Marionette.ItemView.extend({
[...]
initialize: function(){
Marionette.ItemView.prototype.initialize.apply(this, arguments);
// get the friend and the user from global "users" collection
this.user = users.get(this.model.get('user_id'));
this.friend = users.get(this.model.get('friend_id'));
this.user.on('change:name', this.render, this);
this.friend.on('change:name', this.render, this);
},
remove: function(){
this.user.off('change:name', this.render, this);
this.friend.off('change:name', this.render, this);
this.user = null;
this.friend = null;
Marionette.ItemView.prototype.remove.apply(this, arguments);
},
});
Это именно то, что я искал. Хороший, полный и ясный ответ, спасибо ivarni! – Simmoniz
Из моих собственных тестов с использованием Marionette explorer, если вы не вызываете вручную this.model.destroy(); в onDestroy() модель никогда не уничтожается. – Growiel
@Growiel Мне очень хотелось бы увидеть демонстрацию этого поведения, поскольку я только что связался с исходным кодом, который явно называет эти методы. Возможно, это более старая версия? – ivarni