EmberView'keydown'和'keypress'事件无法呈现?

时间:2013-12-01 21:47:57

标签: javascript-events ember.js keypress keydown

我有一个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事件会将“clicked”记录到控制台中,但不会记录为keydown事件。

我四处搜索,似乎,我需要将注意力集中在'视图'上才能注册'keyDown'事件。所以我将它添加到我的'didInsertElement'函数中:

this.$().focus();

然而,这也不起作用。在旁注中,我将'keyDown'事件添加到扩展Ember.TextArea的Textarea视图中,并且DID注册了keyDown事件。

我在这里缺少什么?

1 个答案:

答案 0 :(得分:11)

所以我认为出了什么问题,对此的答案在于,除非主要元素关注它,否则无法触发'keydown'事件。当然,正如我的代码指定的那样可以用

来解决
this.$().focus();

然而,它深入1级。此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 
}