EmberJs输入onkeypress事件未发送到组件

时间:2014-06-23 15:35:14

标签: javascript ember.js

我正在使用EmberJS,我希望当用户在我的搜索栏中键入一个键时,会将一个操作发送到我的组件。我已阅读(http://emberjs.com/api/classes/Ember.TextSupport.html#property_onEvent)我应该将 onEvent =“keyPress”放入我的输入中,但它不起作用。目前,如果我输入一些文本,则不会调用search()方法,但是如果我按下回车键。

这是我的模板:

<div id="command-manager">
    {{input type="search" action="search" onEvent="keyPress" placeholder="Enter a command here" maxlength="32"}}
</div>

这是我的组件:

var CommandManagerComponent = Ember.Component.extend({

  actions:{
    search:function() {

      console.log('search');

    }
  }
});

正如你所看到的,这很简单,我不知道我做错了什么。

2 个答案:

答案 0 :(得分:1)

http://emberjs.com/guides/components/sending-actions-from-components-to-your-application/

  

通常,您应该将组件操作视为翻译   原始事件(如鼠标单击或元素暂停   event)在你的应用程序中具有语义含义的动作。

否则使用视图,用于UI过渡/效果。

现在,要对您的组件使用操作,您需要使用sendAction()

示例:http://emberjs.jsbin.com/wofom/1/edit

答案 1 :(得分:1)

我有完全相同的问题。组件与视图的关系可能很棘手。

我发现扩展助手是最快捷的方法。试试这个:

var CommandManager = Ember.TextField.extend({
    keyUp: function ( event ) {
        // targetObject is the active view controller
        // this function will look for the search action
        // on your controller
        this.get('targetObject').send('search');
    }
});
Ember.Handlebars.helper('command-manager', CommandManager);

您可以在模板中调用此方法,如下所示:

<div id="command-manager">
    {{command-manager placeholder="Enter a command here" maxlength="32"}}
</div>

备注

  1. 这将输入标准文本输入而不是搜索输入 OK?
  2. 我假设你正在使用控制器,如果你没有删除 this.get('targetObject').send('search');部分并运行你的 keyUp函数中的代码。
  3. 我希望有所帮助。祝你好运!