Zaimplementowałem prostą metodę close()
dla wszystkich widoków szkieletu, która udostępnia widok, gdy nie jest potrzebny/wymaga zresetowania.Backbone.js: sposób przeprowadzania czyszczenia pamięci na widokach nadrzędnych oraz widokach podrzędnych
Backbone.View.prototype.close = function() {
if (this.onClose) {
this.onClose();
}
this.remove();
this.unbind();
};
NewView = Backbone.View.extend({
el: '#List ul',
initialize: function() {},
render: function() {
_(this.collection.models).each(function(item) {
this.renderChildren(item);
}, this);
},
renderChildren: function(item) {
var itemView = new NewChildView({ model: item });
$(this.el).prepend(itemView.render());
},
onClose: function() {
this.collection.reset();
// I want to remove the child views as well
}
});
NewChildView = Backbone.View.extend({
tagName: 'li',
render: function() {
}
});
Teraz, po usunięciu widoku nadrzędnego, chcę również usunąć wszystkie widoki podrzędne tutaj. Wszelkie pomysły, w jaki sposób mogę to zrobić bez zapętlenie poprzez modeli takich jak ta ....
_(this.collection.models).each(function(item) {
item.close();
}, this);
+1 dziękuję Díra. – vikmalhotra