【问题标题】:Global keyDown/keyPress events in EmberJS without having to set focusEmberJS 中的全局 keyDown/keyPress 事件,无需设置焦点
【发布时间】:2013-12-02 19:31:27
【问题描述】:

我曾经有一个 jQuery 应用程序,一旦文档准备好,它就会有一个 keydown 事件。基本上,只要用户按下一个键,它就会匹配键码并做一些事情。现在我将这个应用程序移植到 Ember,生活变得困难有两个原因:

  1. 唯一可以注册keyDown 事件的时间是包含元素/视图具有焦点时。对非输入字段进行此操作的唯一方法是设置 tabindex 值,为此,我这样做:

    didInsertElement:function(){ this.$().attr("tabindex",0); this.$().focus(); //将焦点带到视图以确保触发keyDown事件:) },

     keyDown:function(event){
             var keycode = event.which || event.keycode;
             switch(keycode){
                    //perform various events
             }
     }
    
  2. 所以上面的操作就像一个魅力,除了它在应用程序上创建一个难看的突出显示焦点,并且每当应用程序失去焦点时,keyDown 事件不会触发。我需要明确点击ApplicationView 区域(不是整个主体)。

我真正想要的是触发一个简单的 keydown 事件,就像我在 jQuery 中一样。有没有人知道怎么了?

【问题讨论】:

    标签: javascript ember.js dom-events global keydown


    【解决方案1】:

    Ember 仅捕获在 ember 应用范围内发生的事件,因此如果您想捕获应用外部的事件(因为您的整个页面不是 ember 应用),而不必关注 ember您必须在 ember 范围之外创建这些事件。

    【讨论】:

    • 不,整个页面是一个 EmberApp。必须有一种方法让 Ember 允许您注册具有全局性质的 DOM 事件。
    • 对不起,这句话让我觉得它只是页面的一部分'所以上面的工作就像一个魅力,除了它会在应用程序上创建一个难看的突出显示焦点,并且每当应用程序失去焦点时, keyDown 事件不会触发。我需要明确单击 ApplicationView 区域(不是整个主体)。'。也许你可以解释一下你的意思
    • 是的,我实例化了 App = Ember.Application.create() 之类的应用程序,以及 App.ApplicationView = Ember.View.extend 之类的视图({//keydown operation notes here})。所以没有什么不寻常的,这就是大多数教程的状态。相应地,创建了一个我认为是主视图的 div 标签,也许如果我们可以让 body 或 document 成为 ApplicationView 而不是 div 标签,它将允许真正全局的 keyDown 操作??
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-17
    相关资源
    最近更新 更多