Реагирование на изменение модели категории в реляционной магистрали
У меня есть модель отношений с Backbone Relational, в результате чего Item
принадлежит к Column
, Добавление элементов в столбцы работает хорошо, но как мне ссылаться на существующее представление для элемента, чтобы удалить его из старого столбца? (Поэтому элементы в настоящее время дублируются по столбцам.)
Пожалуйста, смотрите этот JSFiddle - http://jsfiddle.net/geVPp/1 (я предполагаю, что код должен быть реализован в ColumnView
removeItem
обработчик событий, но я могу ошибаться).
(Пример реализации находится внизу скрипта, поскольку у меня пока нет элементов управления пользовательским интерфейсом.)
Вот ColumnView из скрипки:
var ColumnView = Backbone.View.extend({
className: 'column',
tagName: 'div',
template: Handlebars.compile($('#column-template').html()),
initialize: function() {
_.bindAll(this, 'render', 'renderItem', 'removeItem');
this.model.bind('change', this.render);
this.model.bind('reset', this.render);
this.model.bind('add:items', this.renderItem);
this.model.bind('remove:items', this.removeItem);
},
render: function() {
return $(this.el).html(this.template(this.model.toJSON()));
},
renderItem: function(item) {
var itemView = new ItemView({model: item});
this.$('.items').append($(itemView.render()));
},
removeItem: function(item) {
// @todo -- How do I reference the item model's view, in order to remove the DOM element?
}
});
1 ответ
К сожалению, Backbone не имеет встроенного способа; Вы должны отслеживать ваши дочерние представления (и какую модель они отображают) вручную.
Backbone.Marionette имеет класс CollectionView, который может автоматизировать это для вас. Или вы можете свернуть свой собственный аналог UpdatingCollectionView.
Если вам нужно быстрое исправление, вы можете сохранить ссылку на представление как переменную объекта модели, но это плохо, потому что он не позволяет отображать несколько представлений одной и той же модели.