ember.js 如何从组件中的Ember Input捕获enter事件?

qf9go6mv  于 2022-11-05  发布在  其他
关注(0)|答案(2)|浏览(192)

我有一个Ember组件用于模态,模态通常包含表单,所以我在组件中使用keyPressed方法来捕获各种事件,包括任何enter事件(键码13)。这会得到所有的enter事件,除了那些来自焦点{{input}}字段的事件。看起来Ember是故意阻止这些事件冒泡的,并且我可以从输入中捕获所有其他按键事件。
我还没有找到一个干净的方法来从我的组件中捕获事件。我不想扩展任何东西并使用它,或者在特定的控制器上使用操作,或者其他类似的东西,因为它们都感觉像是一些非常简单的肮脏的变通方法,而且看起来也像是一个明显的用例。我该如何做呢?
编辑:一个小例子,帮助我澄清一下我的意思。我希望当用户在输入字段中点击enter时,keyPressed运行。

// Relevant section of component
App.MyModalComponent = Ember.Component.extend({
    // ...
    keyPressed: function (e) {
        if (e.which === 13) {
            console.log('Do something here, like submit the form');
        }
    },
    // ...
});

// Example of template
{{#my-modal}}
    <form>
        {{input value=foo}}
    </form>
{{/my-modal}}
2w3kk1z5

2w3kk1z51#

你说的是keyPress吗?我不认为keyPressed是一个受支持的事件()。

App.MyModalComponent = Ember.Component.extend({
  foo:'component', 
    keyPress: function (e) {
      console.log('asdf');
        if (e.which === 13) {
            console.log('Do something here, like submit the form');
        }
    }
});

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

iyfjxgzm

iyfjxgzm2#

如果它是用于提交表单,那么使用浏览器的表单提交功能是有意义的。您也可以使组件元素本身成为表单:

Ember.Component.extend({
  tagName: 'form',
  submit: function(e) {
    e.preventDefault(); // To avoid page reload on event propagation
    // Do things
  }
});

相关问题