ember.js EmberView的“keydown”和“keypress”事件是否不呈现?

ecbunoof  于 2022-11-05  发布在  其他
关注(0)|答案(1)|浏览(140)

我有一个EmberApp,它有一个keyDown事件,我打算在渲染特定视图时使其可用,我们将其称为PostsCommentView。为此,我执行以下操作:

App.PostsCommentView = Ember.View.extend({
   eventManager:Ember.Object.extend({
      keyDown:function(event,view){
             console.log("keydown");  // I CAN see this
      },
      click: function(event,view){
              console.log("clicked"); // I CAN see this
      }
   })
    didInsertElement:function(){
              console.log("I have been inserted"); // I CAN see this
    }

});

正如您从我的代码中所读到的,视图确实会插入,并且click事件也会将“单击”日志记录到控制台中,但keydown事件不会。
我搜索了一下,似乎需要将焦点设置在'view'上,以便注册keyDown事件。因此,我将以下内容添加到我的didInsertElement函数:

this.$().focus();

然而,这也不起作用。顺便说一句,我向扩展Ember.TextArea的Textarea视图添加了keyDown事件,它确实注册了keyDown事件。
我错过了什么?

kfgdxczn

kfgdxczn1#

所以我发现哪里出了问题,答案在于“keydown”事件不能被触发,除非main元素有一个焦点。当然,正如我的代码所指定的,这可以用

this.$().focus();

然而,它是一级深。这个EmberView呈现的默认元素是一个div,并且它必须是一个div。除非你显式地使用'tabindex'属性,将其设置为-1(不能被定位到)或0(可以被定位到并且是可聚焦的),否则Div不能被“聚焦”。
所以我在视图的didInsertElement中执行了此操作

didInsertElement(){
   this.$().attr('tabindex',0);
   this.$().focus();
},
keyDown:function(){
   console.log('keydown function was triggered') ; // This time it logs itself fine 
}

相关问题