2013-12-01 4 views
5

У меня есть EmberApp, что есть событие А «KeyDown», который я намерен сделать доступным, когда конкретный вид оказывается, давайте назовем это «PostsCommentView», чтобы сделать это, я:События EmbarView 'keydown' и 'keypress' не отображаются?

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 
    } 

}); 

Как вам может читать из моего кода, вид определенно вставляет, а событие клика также записывает «клик» в консоль, но НЕ для события keydown.

Я искал вокруг, и мне кажется, что мне нужно сосредоточиться на «представлении», чтобы зарегистрировать событие «keyDown». Так что я добавить это к моей функции «didInsertElement»:

this.$().focus(); 

Однако, это не сработало. На стороне примечания я добавил событие «keyDown» в представление Textarea, которое расширяет Ember.TextArea, и оно зарегистрировало событие keyDown.

Что мне здесь не хватает?

ответ

11

Итак, я понял, что происходит не так, ответ на этот вопрос заключается в том, что события «keydown» не могут быть вызваны, если основной элемент не сосредоточен на нем. Это, конечно, по моему коду, может быть разрешено с помощью

this.$().focus(); 

Однако он идет на 1 уровень глубиной. Элемент по умолчанию, отображаемый этим EmberView, является div, и он должен быть div. Div не может быть «сосредоточено», если вы явно не используете свойство «tabindex», устанавливая его равным -1 (нельзя вставлять в таблицу) или 0 (можно вставлять в таблицу и настраивать).

Так что я сделал это в didInsertElement мой взгляд в

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

работал для меня, спасибо. – velotron

+1

Вы должны принять свой ответ :) –

+0

Это немного ошеломляет, почему это не по умолчанию ?! Даже при нажатии на представление он не фокусируется должным образом и не может захватывать ключевые события! – Jaime

Смежные вопросы