在Ember.js v2 +中检测按键

时间:2016-01-23 01:14:12

标签: javascript ember.js

我在使用ember v2.3.0检测按键时遇到了问题。我用ember开始,我尝试编写显示按键的简单组件。但是我遇到了运行操作和参数的问题。 基本上我可以在didRender中使用this.$().on("keypress",function(){ ... });来获取keyCode,但我认为它在Ember中不是一个好习惯。有人可以帮我吗?请。 :)

这是我的代码: http://emberjs.jsbin.com/vucenomibo/edit?html,js,output

HTML:

  <script type="text/x-handlebars" data-template-name="application">
     <h2>Welcome to Ember.js</h2>
     {{outlet}}
  </script>

  <script type="text/x-handlebars" data-template-name="index">
     {{my-component item=this setAction="smth"}}
  </script>

  <script type="text/x-handlebars" data-template-name="components/my-component">
     <div class="app-body" {{action "smth"}} >
       Pressed: {{pressedKeyCode}}
     </div> 
  </script>

JS:

App = Em.Application.create();

App.IndexController = Em.Controller.extend({
  actions : {

  }
});

App.MyComponentComponent = Em.Component.extend({
  didRender: function() {
    console.log(this.get('context'));
    console.log(this.get('item'));
    return this.$().attr({ tabindex: 1 }), this.$().focus();
  },
  pressedKeyCode: null,
  actions:{
    smth: function(e) {
      console.log('aaa');
      this.send('displayKey', String.fromCharCode(e.keyCode));
    },
    displayKey: function(keyCode) {    
        this.get('item').set('pressedKeyCode', keyCode); 
    }

  }
});

修改
我这样做了: http://emberjs.jsbin.com/qipeponiqu/1/edit?html,js,output

有人可以查看吗?我想学习最佳实践。 :)

1 个答案:

答案 0 :(得分:4)

官方Ember.js指南中有handling events部分应该有用。

如果您希望组件处理keydown,您可以这样做:

import Ember from 'ember';

export default Ember.Component.extend({
  didRender: function() {
    this.$().attr({ tabindex: 1 });
    this.$().focus();
  },
  shortcutKey: null,

  keyDown(event) {
    this.set('shortcutKey', String.fromCharCode(event.keyCode));
  }
});

其余部分请参阅full Ember Twiddle,但模板与您的模板相同。