2011-08-18 87 views
15

我有一个叫做gallery选项的视图。当画廊呈现时(直到它关闭),我想倾听并采取行动。Backbone.js - 视图处于活动状态时添加keydown事件?

我如何在骨干事件中做到这一点?我尝试了'keydown X'的所有变体:函数,都没有工作。

+0

您的画廊是骨干视图还是独立的html + js? –

+0

这是一个骨干观点。 –

+0

向我们展示您的“keydown”事件的选择器...我认为您将它们绑定到错误的元素 –

回答

22

我只是测试下,它完美地工作:

var view = Backbone.View.extend({ 
    // ... snip ... 
    events: { 
    'keyup :input': 'logKey' 
    ,'keypress :input': 'logKey' 
    } 
    ,logKey: function(e) { 
    console.log(e.type, e.keyCode); 
    } 
}); 

我会回去检查你的代码。 Backbone中的所有事件被定义为连接到viewInstance.el元素的代表。要取消绑定事件,请拨打viewInstance.remove(),其中调用$(viewInstance.el).remove()并清除所有委派的事件。

另请注意,在某些浏览器中(我相信Firefox)存在一个已知问题,即某些密钥(如箭头键)不会冒泡,并且在委派的keypress事件中无法正常工作。如果你抓住特殊键,你可能会更好使用keyup和​​。

+2

这是不是假设有问题的视图包含输入?我认为OP在询问一个特定视图是简单渲染的情况 - 想象一下有一个lightbox的图像或其他东西,并且您想要连接“Escape”来关闭图像...... – 2011-10-26 07:21:03

+2

你是对的。我的解决方案假定有输入元素。如果您想对视图中任何位置的关键事件采取行动,则只需排除选择器(如Backbone文档所述)。 'events:{keyup:'logKey'}' – fearphage

+9

- 我无法获得这些全局按键/键盘/键盘的工作。还有其他一些我必须遗忘的细节吗?你能否指出一个参考或者甚至是一个小提琴来获得关于文档范围事件的更多信息 – streetlight

相关问题