2013-12-02 3 views
3

Раньше у меня было приложение jQuery, у которого было событие «keydown» после того, как документ был готов. В принципе, в любое время, когда пользователь нажимает клавишу, он будет соответствовать коду клавиш и что-то делать. Теперь я портировал это приложение на Ember, и жизнь стала трудной по двум причинам:Глобальные события KeyDown/keyPress в EmberJS без необходимости устанавливать фокус

1) Единственный момент, когда событие «keyDown» можно зарегистрировать, это когда содержащийся элемент/View сосредоточен на нем. Единственный способ это может быть сделано с не входных полей, установив значение TabIndex, чтобы достичь этого, я делаю это:

didInsertElement:function(){ 
      this.$().attr("tabindex",0); 
      this.$().focus(); //bringing focus to the view in order to ensure keyDown event is triggered :) 
    }, 

    keyDown:function(event){ 
      var keycode = event.which || event.keycode; 
      switch(keycode){ 
        //perform various events 
      } 
    } 

2) Таким образом, вышеуказанные работы как шарм, за исключением того, что создает уродливый выделенный фокус на приложении и всякий раз, когда приложение теряет фокус, события keyDown не запускаются. Мне нужно явно щелкнуть по области ApplicationView (которая не является всем телом).

Все, что я действительно хочу, - это простое событие keydown, инициированное так же, как это было, когда у меня это было в jQuery. У любого тела есть идеи, что случилось?

ответ

0

Ember специально улавливает события, которые происходят в рамках приложения ember, поэтому, если вы хотите поймать события, внешние по отношению к вашему приложению (так как вся ваша страница не является ember-приложением) и не должны фокусироваться на вам нужно будет создать эти события за пределами области ember.

+0

Нет, вся страница является EmberApp. Должен быть способ, которым Ember позволит вам регистрировать события DOM, имеющие глобальный характер. –

+0

Извините, это заявление заставило меня подумать, что это всего лишь часть страницы. «Итак, это работает как шарм, за исключением того, что он создает уродливый выделенный фокус на приложении и всякий раз, когда приложение теряет фокус, события keyDown не запускаются. Мне нужно явно щелкнуть область ApplicationView (которая не является всем телом). '. Может быть, вы могли бы объяснить, что вы подразумеваете под этим? – Kingpin2k

+0

Да, я создаю экземпляр приложения, например App = Ember.Application.create(), и View, как App.ApplicationView = Ember.View.extend ({// операция смены клавиш отмечена здесь}) , Так что ничего необычного, это то, как говорится в большинстве руководств. В соответствии с этим создается тег div, который, по моему мнению, является основным видом, может быть, если бы мы могли позволить телу или документу стать ApplicationView вместо тега div, это позволит операции keyDown, которая действительно является глобальной? –

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