停止在 backbone 中应用于同一事件对象的事件传播
Stop event propagation applying on same event object in backbone
我使用 2 个不同的回调将相同的自定义事件应用于 backbone 中的事件对象。
var ourObject = {};
_.extend(ourObject, Backbone.Events);
function dancing (msg) { console.log("We are dancing. " + msg); }
function jumping (msg) { console.log("We are jumping. " + msg); }
ourObject.on("move", dancing);
ourObject.on("move", jumping);
当我使用 ourObject.trigger("move", "Yeah!");
触发移动事件时,它会触发两个回调。
如何防止第一次回调触发第二次回调?
您可以将包含标志的对象作为事件对象作为第二个参数传递:
function dancing(msg, event) {
console.log(event); // flag: false
event.flag = true;
console.log("We are dancing. " + msg);
}
function jumping(msg, event) {
console.log(event); // flag: true
if(!event.flag) return;
console.log("We are jumping. " + msg);
}
ourObject.trigger("move", 'test', {
flag: false
});
或者您可以简单地执行以下操作:
function dancing (msg) {
this.dancingTriggered = true;
console.log("We are dancing. " + msg);
}
function jumping (msg) {
if(this.dancingTriggered){
this.dancingTriggered = false;
return;
}
console.log("We are jumping. " + msg);
}
或者只使用在这些回调范围内可用的简单变量
我使用 2 个不同的回调将相同的自定义事件应用于 backbone 中的事件对象。
var ourObject = {};
_.extend(ourObject, Backbone.Events);
function dancing (msg) { console.log("We are dancing. " + msg); }
function jumping (msg) { console.log("We are jumping. " + msg); }
ourObject.on("move", dancing);
ourObject.on("move", jumping);
当我使用 ourObject.trigger("move", "Yeah!");
触发移动事件时,它会触发两个回调。
如何防止第一次回调触发第二次回调?
您可以将包含标志的对象作为事件对象作为第二个参数传递:
function dancing(msg, event) {
console.log(event); // flag: false
event.flag = true;
console.log("We are dancing. " + msg);
}
function jumping(msg, event) {
console.log(event); // flag: true
if(!event.flag) return;
console.log("We are jumping. " + msg);
}
ourObject.trigger("move", 'test', {
flag: false
});
或者您可以简单地执行以下操作:
function dancing (msg) {
this.dancingTriggered = true;
console.log("We are dancing. " + msg);
}
function jumping (msg) {
if(this.dancingTriggered){
this.dancingTriggered = false;
return;
}
console.log("We are jumping. " + msg);
}
或者只使用在这些回调范围内可用的简单变量