2013-10-26 2 views
1

Я пытаюсь использовать Ember.js, но я застреваю при использовании действий.Ember.js map action keyUp event

Если я использую следующее:

<button {{action "test"}}>Test</button> 

И создать контроллер:

App.NewController = Ember.ArrayController.extend({ 
    actions: { 
     test: function() { 
      console.log("test"); 
     }, 
    } 
}); 

Тогда все прекрасно работает, и я могу видеть test в моем журнале. Однако, когда я пытаюсь следующее:

<input type="text" {{action "test2" on="keyUp"}} /> 

И определить test2 действие подобным образом:

App.NewController = Ember.ArrayController.extend({ 
    actions: { 
     test: function() { 
      console.log("test"); 
     }, 
     test2: function() { 
      console.log("test2"); 
     } 
    } 
}); 

Тогда это не похоже на работу. Моя тестовая кнопка работает, но обработчик события keyup не запускается, как я ожидал после чтения the documentation.

ответ

3

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

http://emberjs.jsbin.com/EBoLEZe/1/edit

{{input value=name}}

postKey: function(){ 
    console.log(this.get('name')); 
    }.observes('name') 

Смотрите также: KeyPress event not working as expected in Ember

+0

Спасибо, я использовал первый метод (с 'postKey'). Я попробую другой подход (из связанного ответа) позже. Является ли это решение предпочтительным или не имеет значения? – g00glen00b

+0

Это зависит от того, что вам нужно. Если все, о чем вы заботитесь, это когда поле меняется, а не когда кто-то нажимает shift или ctrl или что-то подобное, я думаю, что это решение проще. Если вы действительно хотите знать, когда поднимается какая-либо клавиша (например, клавиша ввода), другое решение лучше. – Kingpin2k

+0

@ Kingpin2k: есть ли способ ввести задержку. В настоящее время, когда пользователь нажимает клавишу, мы вызываем функцию. Теперь я хочу убедиться, что когда пользователь делает паузу или делает ввод, тогда только я должен вызывать функцию вместо вызова функции на каждом ключе вниз. – SharpCoder

0

Похоже, есть ошибка (или, по крайней мере, очень странное поведение), влияющая на способность использовать действия с событиями клавиатуры. Обычно обработчики действий для событий, отличных от клавиатуры (например, событие «click» по умолчанию) не работают при нажатии клавиш-модификаторов. В вашем коде, если вы добавите allowedKeys="any" к вашему помощнику действий, ваш обработчик будет вызван.

Fiddle: http://emberjs.jsbin.com/oyEpImI/2/edit?html,js,output

+3

Мое исправление для этого было просто объединено с Ember https://github.com/emberjs/ember.js/commit/567aafa8f0de6b29d90d8638f2166b8df6275f9c –