【问题标题】:Ember handle save action and extract pressed keyEmber 处理保存操作并提取按键
【发布时间】:2014-08-01 17:37:46
【问题描述】:

我有一个文本区域,我想从中捕获一个shift-enter 事件,该事件在其中被按下。

entershift-enter 都调用controllersave 方法。但是在save 方法中,我似乎没有param 给我按下的键(数字)。

当我在我的view(controller) 中实现keyUp: (e) -> 方法时,当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

每按一次entershift-entersave action 就会被调用两次。

【问题讨论】:

  • 你能创建一个 jsbin 复制你的问题吗?
  • 我用代码@lame_coder 更新了问题

标签: ember.js ember-cli


【解决方案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')
});

检查这个jsbinhttp://emberjs.jsbin.com/fazibu/1/edit

【讨论】:

  • event.shiftKey from this.get('controller').send('save',event.shiftKey); 没有被转移到控制器的 save 操作。控制器中的isShift 始终具有文本区域内的文本值。
  • 我认为您可能已经在模板中提供了操作..删除那个..listenKey 方法会解决这个问题...
  • 是的,我查看了 jsbin。好的,到目前为止,我已经可以识别 shift 键了,但是当我按下 shift-enter 时,save 动作被调用了两次,一次有一次没有shiftKey = true
  • 使用 textarea 而不是 textfield 会有区别吗? @CodeJack
  • 我不这么认为..它在这里只调用了一次emberjs.jsbin.com/fazibu/2/edit
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-04
  • 1970-01-01
  • 1970-01-01
  • 2020-11-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多