Javascript 无需设置焦点的EmberJS中的全局按键/按键事件

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();//将焦点带到视图

我曾经有一个jQuery应用程序,一旦文档准备好,它就有一个
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
             }
     }