#backbone.js
#backbone.js
Вопрос:
Я реализовал простой close()
метод для всех базовых представлений, который удаляет представление, когда оно не требуется / нуждается в сбросе.
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() {
}
});
Теперь, когда я удаляю родительское представление, я также хочу удалить все дочерние представления здесь. Любые идеи, как я могу это сделать, не просматривая подобные модели….
_(this.collection.models).each(function(item) {
item.close();
}, this);
Ответ №1:
Я думаю, что в большинстве случаев вам следует сохранить удаление вида в слое просмотра, не затрагивая ваши модели.
Например, если вы удалите представление с комментариями, возможно, другое представление в вашем приложении покажет подборку комментариев или какую-то статистику, и сброс коллекции также повлияет на эти представления.
Поэтому я думаю, что вы должны сохранить все это в поле зрения (включены только соответствующие методы).:
NewView = Backbone.View.extend({
initialize: function() {
this.childViews = [];
},
renderChildren: function(item) {
var itemView = new NewChildView({ model: item });
$(this.el).prepend(itemView.render());
this.childViews.push(itemView);
},
onClose: function() {
_(this.childViews).each(function(view) {
view.close();
});
}
});