Backbone.js触发事件阻塞后续语句

时间:2016-01-25 12:36:02

标签: javascript backbone.js backbone-events

 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()没有立即执行。 但是"被执行了#34;消息不打印。触发事件时代码是否挂起?

1 个答案:

答案 0 :(得分:0)

它没有被执行,因为每次运行preventDefault功能时,您都会将saveOrNot值设置为true,但是当您检查此值时,它会&#39 ; s始终为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")
     }

   }
 }