【发布时间】:2014-03-27 16:59:48
【问题描述】:
刚开始使用 Ember,我想在用户在文本字段中键入内容时执行一些操作。我第一次尝试这个
<input type="text" {{bind-attr value=qty}} {{action "checkQty" on="keyUp"}}/>
这正确初始化了文本字段的值并在我的控制器的actions 哈希中调用了checkQty() 函数,但我没有得到qty 的更新值。所以看来bind-attr 是一种单向交易。
我尝试使用TextField 视图:
{{view Ember.TextField value=qty onEvent="keyPress" action="checkQty"}}
我不得不使用keyPress 而不是keyUp,因为onEvent only allows enter or keyPress。这行得通,除了在keyPress 上读取 qty 的值会给我在用户按下键之前而不是之后的字段值。
所以我最终使用输入助手来指定字段:
{{input type="text" value=qty}}
并在我的控制器中创建了一个观察者:
checkQty: function() {
Ember.Logger.log('qty: ', this.get('qty'));
}.observes('qty').on('change')
这样可行,但现在我对构建 Ember 应用程序的最佳实践感到困惑。 似乎规定的方法是让您的模板有效地调用控制器上的操作。我对观察者的使用感觉就像是在解决我无法在模板中使用它的问题。
查看 Ember 源代码后,我能够扩展 TextField 以获得我想要的行为:
MyApp.TextField = Ember.TextField.extend({
keyUp: function(event) {
this.sendAction('action', this.value);
}
});
然后我的模板变成了:
{{view MyApp.TextField value=qty onEvent="keyUp" action="checkQty"}}
在 Ember 中是否有更好的方法来实现这一点?
【问题讨论】:
标签: ember.js