2

我刚开始学习 ember.js 为什么这段代码http://jsfiddle.net/alexchetv/RVNzP/不能正常工作—— App.MyTextField.change() 执行只有在 MyTextField 失去焦点后才会触发? 具有相同功能的替代代码按预期工作。

4

2 回答 2

8

请记住,您的 Ember.Views 上的处理程序(更改、选择、单击等)绑定到正常的 HTML DOM 事件。“onchange”仅在输入字段失去焦点并发生更改时才被调用,而不是在任何时候修改值时调用。如果您想收到有关显示值更改的通知,您应该观察“值”。

于 2012-05-10T16:51:42.817 回答
1

这是一个有效的解决方案

我所做的是让 formDirty 成为一个计算值,它会根据输入的变化重新计算。Ember 与原生的“更改”事件不同,它会在每次击键(复制/粘贴事件等)时更新 Input 的值。
Ember 的绑定确保 peopleController 始终使用输入值更新,因此也更新计算字段 formDirty。

请注意,如果添加更多输入,则必须告诉计算属性侦听其事件,例如

formDirty: function() {
    return !Ember.empty(this.get('fName')) && !Ember.empty(this.get('lName'));;
}.property('lName', 'fName').cacheable() // <- dependencies   

cacheable() 仅用于性能考虑,这意味着在依赖关系更改之前不会再次计算。

于 2012-12-13T12:59:49.173 回答