有可能吗?像这样:
...
events {
'keydown body' : 'doSmth'
}
...
答案 0 :(得分:5)
这是不可能的,因为Backbone使用事件哈希来订阅视图元素(view.el属性)上的事件和元素的后代。它不会从视图元素之外的元素订阅事件。
因此,如果视图的元素是table,那么当在表上触发keydown事件时将调用doSomething()函数,但如果在页面上的另一个元素上触发了keydown事件,则不会调用它。 / p>
答案 1 :(得分:2)
一般来说,'html'上的keydown应该有效,请看这个问题:
但是,通常最好让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()
if($(document).find($(this.options.container)).size() <= 0) {
alert("view not in document");
$(document).unbind('keydown', this.keyPress);
}else {
alert("view is here");
}