Backbone.js触发事件阻塞后续语句
Backbone.js trigger event blocks the subsequent statement
obj1.listen(obj2, 'save', function(t) {
t.preventDefault()
})
obj2 = {
save: function save(a) {
var saveOrNot = !1;
this.trigger("save", {
preventDefault: function() {
saveOrNot = !0
}
});
console.log("prevent default after")
if (!saveOrNot) {
console.log("got excuted")
}
}
}
在我看来,触发行之后的行总是被执行,因为 preventDefault()
不会立即被执行。
但是 "got executed" 消息不会打印出来。触发事件时代码是否挂起?
它没有被执行,因为每次当你 运行 preventDefault
函数时你将 saveOrNot
值设置为 true
,但是当你检查这个值条件时它是始终为 false,因此永远不会执行控制台日志。
if (!saveOrNot) { // this is the line in scope => this is always false
console.log("got excuted")
}
如果您想将值条件更改为相反的状态,最好使用否定:
saveOrNot = !saveOrNot;
我将按以下方式重写您的代码:
obj1.listen(obj2, 'save', function(t) {
t.preventDefault()
})
obj2 = {
save: function save(a) {
var saveOrNot = 0;
this.trigger("save", {
preventDefault: function() {
saveOrNot = !saveOrNot;
}
});
console.log("prevent default after")
if (!saveOrNot) {
console.log("got excuted")
}
}
}
obj1.listen(obj2, 'save', function(t) {
t.preventDefault()
})
obj2 = {
save: function save(a) {
var saveOrNot = !1;
this.trigger("save", {
preventDefault: function() {
saveOrNot = !0
}
});
console.log("prevent default after")
if (!saveOrNot) {
console.log("got excuted")
}
}
}
在我看来,触发行之后的行总是被执行,因为 preventDefault()
不会立即被执行。
但是 "got executed" 消息不会打印出来。触发事件时代码是否挂起?
它没有被执行,因为每次当你 运行 preventDefault
函数时你将 saveOrNot
值设置为 true
,但是当你检查这个值条件时它是始终为 false,因此永远不会执行控制台日志。
if (!saveOrNot) { // this is the line in scope => this is always false
console.log("got excuted")
}
如果您想将值条件更改为相反的状态,最好使用否定:
saveOrNot = !saveOrNot;
我将按以下方式重写您的代码:
obj1.listen(obj2, 'save', function(t) {
t.preventDefault()
})
obj2 = {
save: function save(a) {
var saveOrNot = 0;
this.trigger("save", {
preventDefault: function() {
saveOrNot = !saveOrNot;
}
});
console.log("prevent default after")
if (!saveOrNot) {
console.log("got excuted")
}
}
}