如何将事件附加到使用backbone.js?

时间:2011-12-15 07:23:19

标签: javascript backbone.js

有可能吗?像这样:

...
events {
  'keydown body' : 'doSmth'
}
...

3 个答案:

答案 0 :(得分:5)

这是不可能的,因为Backbone使用事件哈希来订阅视图元素(view.el属性)上的事件和元素的后代。它不会从视图元素之外的元素订阅事件。

因此,如果视图的元素是table,那么当在表上触发keydown事件时将调用doSomething()函数,但如果在页面上的另一个元素上触发了keydown事件,则不会调用它。 / p>

答案 1 :(得分:2)

一般来说,'html'上的keydown应该有效,请看这个问题:

keydown on body?

但是,通常最好让Backbone View中的事件由View的el中的元素触发。在这种情况下,您可以使您的一般应用程序范围的View接受keydown输入:

events: {
    'keydown': 'doSomething'
}

答案 2 :(得分:1)

只需在视图的initialize方法中使用jQuery等框架绑定它。

 var View = Backbone.View.extend({
      initialize: function() {
         _.bindAll(this, "keyPress");
         $(document).bind('keydown', this.keyPress);
      },
      keyPress: function(e) {
         console.log(e.keyCode);
         alert(e.keyCode);
         return false;
      }
   });

别忘了解开,这很重要;您可以使用$(document).find(this.$el).size()

检入keyPress以查看视图是否仍在dom(文档)中
if($(document).find($(this.options.container)).size() <= 0) {
      alert("view not in document");
      $(document).unbind('keydown', this.keyPress);
}else {
      alert("view is here");
}