登録番号on
が複数回実行されているため、あなたの質問に表示されていない部分があり、一度だけ行う必要があります。
は✘on
機能を複数回使用して、この
var view = Backbone.View.extend({
events: {
"click": "onClick"
},
initialize: function(){
App.actionsChannel.on('action:triggered', this.onActionTriggered);
},
onClick: function(e) {
// or if you must register it here for example.
// First make sure it's unregistered.
App.actionsChannel.off('action:triggered', this.onActionTriggered);
App.actionsChannel.on('action:triggered', this.onActionTriggered);
},
onActionTriggered: function(actionName) {
//do some ajax requests
},
});
は単なるリストに別のリスナーを追加してください✔
var view = Backbone.View.extend({
events: {
"click": "onClick"
},
onClick: function(e) {
App.actionsChannel.on('action:triggered', function(actionName) {
//do some ajax requests
});
}
});
にこの
をしないでください。したがって、トリガされると、コールバックは登録された回数だけ呼び出されます。
最高
メモリリークを回避するためにlistenTo
の代わりon
可能な限りを使用することをお勧めします。
Backbone.js on
vs listenTo
var view = Backbone.View.extend({
events: {
"click": "onClick"
},
initialize: function(){
// this will be removed automatically when the view is `remove`d,
// avoiding memory leaks.
this.listenTo(App.actionsChannel, 'action:triggered', this.onActionTriggered);
},
onClick: function(e) {
},
onActionTriggered: function(actionName) {
//do some ajax requests
},
});
上記のコードスニペットは、イベントに耳を傾けるする方法の例にすぎません。 trigger
を使用してください。必要な場所と意味が分かります。
私は一箇所で 'on'関数のみを使います。私は2つのビューを持って、1つはイベントをトリガし、他のものは初期化にそれをキャッチします – kdureidy
私はゾンビのビューを持っていると思う、ルートを変更すると、イベントをキャッチする現在のビューの前に作成された新しいビュー – kdureidy
Favorそのため、 'listenTo'を' on'に置き換えます。 –