ブラウザの戻るボタンをクリックしたときに重複を引き起こさないようにイベントを削除する方法を教えてください。または、ビューを再度初期化するときに、イベントを元に戻す方法はありません。本当にそれに対処する方法を突きつけた。 ボタンを押してからもう一度押すと、複数の発火イベントが発生します。モデルフォームデータを保存する場合など。ありがとうございました。ブラウザの戻るボタンが押されたときのビューイベントの削除解除
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});
おそらくゾンビの意見があります。これを再現する最小限のコードを共有する必要があります。もう一度ビューを初期化するときにイベントを元に戻す必要はありません(それは間違ったアプローチであり、可能であれば疑問です)、ビューを削除する前にすべてのリスナーを確実に削除する必要があります。 –
サンプルコードを追加しました。私は間違っていることを知っています。あなたはそれを明確にしてください。あなたの答えをありがとう。 – Paule
あなたのビューをDOMに追加するコードはありません...?それでは、これはどのように機能しますか?既存のビューを削除しないと、別のルートに移動するときにテンプレートが削除されます。 –