我刚开始学习ember.js 为什么此代码http://jsfiddle.net/alexchetv/RVNzP/无法正常工作 - 仅在MyTextField失去焦点后才会触发App.MyTextField.change()执行? 具有相同功能的Alternative code按预期工作。
答案 0 :(得分:8)
请记住,Ember.Views上的处理程序(更改,选择,单击等)绑定到普通的HTML DOM事件。 “onchange”仅在字段失去焦点并且已更改时才在输入字段上调用,而不是在修改值的任何时间。如果您希望收到有关显示值更改的通知,则应观察“值”。
答案 1 :(得分:1)
我所做的是使formDirty成为一个计算值,它重新计算输入中的变化。与原生“更改”事件不同,Ember会在每次击键时更新输入值(复制/粘贴事件等)。
Ember的绑定确保了peopleController始终使用输入值进行更新,因此也更新了计算字段formDirty。
请注意,如果添加更多输入,则必须告知计算属性侦听其事件,例如
formDirty: function() {
return !Ember.empty(this.get('fName')) && !Ember.empty(this.get('lName'));;
}.property('lName', 'fName').cacheable() // <- dependencies
cacheable()仅用于性能,这意味着在依赖关系发生变化之前不要再次计算。