【发布时间】:2014-05-21 10:23:12
【问题描述】:
我有这个输入框
{{input {{action 'test2' on="keyDown" allowedKeys="any"}} }}
我无法执行此操作。当我们有这样的事情时,有没有办法调用一个动作?
【问题讨论】:
我有这个输入框
{{input {{action 'test2' on="keyDown" allowedKeys="any"}} }}
我无法执行此操作。当我们有这样的事情时,有没有办法调用一个动作?
【问题讨论】:
不,这样是不可能的。当您尝试绑定“keyDown”事件时。您不能通过观察文本框的值来实现相同的功能。我在这里给出了示例代码。
模板:
{{input value=myValue}}
控制器:
myValueDidChange : function() {
// Code here
}.observes('myValue')
【讨论】:
myValueDidChange函数中输入的值?
现在你可以写:
{{input value=myValue action="test2" on="key-down"}}
查看更多信息:http://guides.emberjs.com/v1.10.0/templates/input-helpers/#toc_actions
【讨论】:
this.controller.get('myValue').
另一个选择,如果你要在多个地方需要这个,那就是创建一个组件。那时你确实可以抓住按键。例如,如果你想要一个数字框,你可以这样做:
<script type="text/x-handlebars" data-template-name="components/numeric-input">
{{input type='number' value=val classNames='text-align-right'}}
</script>
然后在控制器上:
App.NumericInputComponent = Ember.Component.extend({
keyPress: function(evt){
...code here....
}
});
最后你可以使用:
{{numeric-input val=productCount}}
【讨论】:
一种解决方案是在您的控制器中注册一个动作并通过事件从输入助手调用它。
控制器中的动作
App.ApplicationController = Ember.Controller.extend({
//Attribute as a component for your template
search: '',
actions: {
query: function() {
console.log('ApplicationController > query')
var query = this.get('search');
console.log('> ' + query);
//do something ...
// this.transitionToRoute('search', { query: query });
}
}
});
带有按键事件的输入助手:
在每个 keyPress 事件上从您的 ApplicationController 调用操作查询
{{input type="text" class="form-control" placeholder="Query" value=search key-press="query"}}
这里是事件列表:Ember Events
【讨论】:
学分去here:
{{input value=myValue focus-in="focus" key-down="keydown"}}
和
export default Controller.extend({
// ...
actions: {
focus() {
// ...
},
keydown() {
// ...
},
}
以及其他任何事件。
编辑:用 Ember 3.1 测试
【讨论】: