Javascript 无需设置焦点的EmberJS中的全局按键/按键事件
我曾经有一个jQuery应用程序,一旦文档准备好,它就有一个Javascript 无需设置焦点的EmberJS中的全局按键/按键事件,javascript,ember.js,dom-events,global,keydown,Javascript,Ember.js,Dom Events,Global,Keydown,我曾经有一个jQuery应用程序,一旦文档准备好,它就有一个keydown事件。基本上,只要用户按下一个键,它就会匹配键码并执行一些操作。现在我将此应用程序移植到Ember,生活变得困难有两个原因: 只有当包含的元素/视图关注某个keyDown事件时,才能注册该事件。使用非输入字段的唯一方法是设置tabindex值,要实现这一点,我执行以下操作: didInsertElement:函数(){ 这个$().attr(“tabindex”,0); this.$().focus();//将焦点带到视图
keydown
事件。基本上,只要用户按下一个键,它就会匹配键码并执行一些操作。现在我将此应用程序移植到Ember,生活变得困难有两个原因:
keyDown
事件时,才能注册该事件。使用非输入字段的唯一方法是设置tabindex
值,要实现这一点,我执行以下操作:
didInsertElement:函数(){
这个$().attr(“tabindex”,0);
this.$().focus();//将焦点带到视图以确保触发keyDown事件:)
},
keyDown
事件不会触发。我需要显式地单击ApplicationView
区域(它不是整个主体)
我真正想要的就是让一个简单的keydown事件以我在jQuery中使用它时的相同方式触发。任何人都知道怎么回事吗?余烬只捕捉在余烬应用程序范围内发生的事件,因此如果你想捕捉应用程序外部的事件(因为你的整个页面不是余烬应用程序),而不必关注余烬,你就必须在余烬应用程序范围之外创建这些事件。不,整个页面是一个应用程序。必须有一种方法,余烬允许您注册具有全局性质的DOM事件。抱歉,这句话让我认为它只是页面的一部分,所以上面的操作就像一个符咒,除了它会在应用程序上创建一个丑陋的突出显示焦点,并且每当应用程序失去焦点时,按键事件都不会触发。我需要在ApplicationView区域(不是整个主体)周围显式单击。也许你可以解释一下它的意思。是的,我实例化了app=Ember.Application.create()之类的应用程序,以及app.ApplicationView=Ember.View.extend之类的视图({//keydown操作在这里注释})。所以没有什么不寻常的,这只是大多数教程的状态。据此,创建了一个div标记,我认为它是主视图,也许如果我们可以让主体或文档成为ApplicationView而不是div标记,它将允许真正全局的keyDown操作??
keyDown:function(event){
var keycode = event.which || event.keycode;
switch(keycode){
//perform various events
}
}