Не могли бы вы объяснить, как удалить события, чтобы предотвратить запуск дублирования при нажатии кнопки «Назад назад». Или есть способ отключить события, когда снова заработает представление. На самом деле застрял, как с этим бороться. Нажатие кнопки «Назад», а затем назад снова вызывает многократное срабатывание событий. Например, при сохранении данных формы модели. Спасибо.Undelegate просмотреть события при нажатии кнопки браузера
var App = {};
// extending models, collections etc.
App.SamplesCollectionView = Backbone.View.extend({
el: '#samples',
template: _.template($('#sample-edit-template').html()),
events: {
'click a.sample-item': 'onEdit'
},
render: function(){
this.$el.append(this.template());
var $sample_list = this.$el.find('ul#sample-list');
this.collection.each(function(sample) {
var rendered = new App.CategoryView({model: sample}).render().el;
$sample_list.append(rendered);
});
},
onEdit: function(e) {
this.undelegateEvents();
// go to edit view
Backbone.history.navigate(e.target.getAttribute('href'), {trigger: true});
return false;
}
});
App.SampleEditView = Backbone.View.extend({
el: '#samples',
template: _.template($('#sample-edit-template').html()),
events: {
'click button.save': 'onSave',
'click button.cancel': 'onCancel',
},
render: function() {
this.$el.append(this.template(this.model.toJSON()));
return this;
},
onSave: function() {
this.undelegateEvents();
var data = Helpers.getFormData(this.$el.find('form'));
this.model.save(data);
// go back to index view
Backbone.history.navigate('/samples', {trigger: true});
return false;
}
});
App.SamplesRouter = Backbone.Router.extend({
routes: {
'samples': 'index',
'samples/edit/:id': 'edit'
},
index: function() {
App.samples = new App.SamplesCollection;
App.samplessView = new App.SamplesCollectionView({collection: App.samples});
},
edit: function(id) {
App.sampleEdit = new App.SampleEdit({id: id});
App.sampleEditView = new App.SampleEditView({model: App.sampleEdit})
}
});
App.samplesRouter = new App.SamplesRouter;
Backbone.history.start({pushState: true, hashChange: false});
У вас, вероятно, есть зомби. Вы должны поделиться минимальным кодом, который воспроизводит это. BTW вам не нужно деактивировать события при повторном инициализации представления (это неправильный подход, и я сомневаюсь, если это возможно), то, что вам нужно сделать, обязательно удалите всех слушателей перед удалением представления. –
Я добавил пример кода. Я знаю, что что-то не так. Не могли бы вы прояснить это. Спасибо за ваш ответ. – Paule
Нет кода, который добавляет ваши взгляды в DOM ...? Тогда как это работает? Если вы не удаляете существующее представление, как его шаблон удаляется при переходе на другой маршрут? –