Ember обрабатывает действие сохранения и извлекает нажатую клавишу

У меня есть текстовое поле, из которого я хочу поймать событие shift-enter, которое нажимается внутри него.

enter, а также shift-enter вызывают метод save класса controller. Но внутри метода save у меня, кажется, нет param, дающего мне нажатую клавишу (число).

Когда я реализую метод keyUp: (e) -> внутри своего view(controller), он либо не вызывается, когда метод save реализован внутри controller, либо, когда метод save не реализован, я получаю сообщение об ошибке nothing handled the action save.

На самом деле я только хочу знать, была ли нажатая клавиша (клавиши), которая вызвала действие save, либо enter, либо shift-enter.

Как лучше всего это сделать? Спасибо!

Обновить

Мой код теперь выглядит так:

ContactIndex = Ember.View.extend
  listenKey: ((event) ->
    if(event.which == 13)
      @get('controller').send('save', event.shiftKey)
  ).on('keyDown') # When I use `keyUp` instead, the isShift boolean value is not being transmitted.


Contact = Ember.ObjectController.extend
  save: (isShift) ->
    console.log('Shift Key Pressed: ' + isShift)
    false

Каждый раз, когда я нажимаю enter или shift-enter, save action вызывается дважды.


person Linus    schedule 31.07.2014    source источник
comment
Можете ли вы создать jsbin, дублирующий вашу проблему?   -  person lame_coder    schedule 31.07.2014
comment
Я обновил вопрос с кодом @lame_coder   -  person Linus    schedule 01.08.2014


Ответы (1)


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

App.IndexController=Ember.Controller.extend({
  actions: {
    save: function(isShift){
      console.log('Shift Key Pressed: ' + isShift);
      return false;
    }
  }
});

App.IndexView=Ember.View.extend({
  listenKey: function(event){
    if(event.which===13){
      this.get('controller').send('save',event.shiftKey);
    }
  }.on('keyUp')
});

Проверьте этот jsbin http://emberjs.jsbin.com/fazibu/1/edit.

person thecodejack    schedule 31.07.2014
comment
event.shiftKey из this.get('controller').send('save',event.shiftKey); не передается в действие контроллера save. isShift в контроллере всегда имеет значение текста внутри текстовой области. - person Linus; 01.08.2014
comment
я думаю, вы, возможно, предусмотрели действие в шаблонах.. удалите это.. метод listenKey позаботится об этом... - person thecodejack; 01.08.2014
comment
Да, я посмотрел на jsbin. Хорошо, пока у меня это работает, клавиша Shift распознается, но когда я нажимаю shift-enter, действие save вызывается дважды, один раз с shiftKey = true и один раз без него. - person Linus; 01.08.2014
comment
Может ли быть разница при использовании текстового поля вместо текстового поля? @CodeJack - person Linus; 01.08.2014
comment
я так не думаю.. здесь он вызывался только один раз emberjs.jsbin.com/fazibu/2/edit - person thecodejack; 01.08.2014
comment
Хорошо, я вижу. Большое спасибо за твою помощь! - person Linus; 01.08.2014