11

我不明白将“点击”侦听器放在视图内的初始化函数中和将其放在同一视图中的事件对象中的区别。它们都监听 DOM 事件和触发函数,对吧?有什么不同?

例如:

var ViewName = Backbone.View.extend({  
    initialize: function(){  
        this.$el.on("eventName", this.functionName, this)  
    },  
    functionName: function(){  
        //whatever  
    }  
});

相对:

var ViewName = Backbone.View.extend({  
    events: { "eventName": "fucntionName" }   
    },  
    functionName: function(){  
        //whatever  
    }  
});
4

1 回答 1

15

当你这样做时:

var ViewName = Backbone.View.extend({  
   initialize: function(){  
      this.$el.on("eventName", this.functionName, this)  
   },  
   functionName: function(){  
    //whatever  
   }  
});

删除视图时,您必须手动取消绑定事件。因此,您必须执行以下操作:

var ViewName = Backbone.View.extend({  
   initialize: function(){  
      this.$el.on("eventName", this.functionName, this)  
   },  
   functionName: function(){  
    //whatever  
   },
   remove: function() {
      this.$el.off("eventName", this.functionName);
      Backbone.View.prototype.remove.apply(this, arguments);
   }  
});

如果您使用events哈希,Backbone 会在视图被移除时处理取消委派事件。这一切都在Backbone.js 注释源的这一部分中进行了解释。

于 2013-10-04T17:43:37.790 回答