我的理解是观察'@each'意味着我正在观察对数组中任何属性的任何更改,但它似乎不起作用.例如:
App.ArrayProxy = Ember.ArrayProxy.extend({
i: 0,
foo: function(){
console.log('foo called');
return ++this.i;
}.property('content.@each')
});
Run Code Online (Sandbox Code Playgroud)
我也试过.property('@ each')而不是.property('content.@ each')同样令人失望的结果.
这是一个jsbin,演示:http://jsbin.com/hagar/5/edit
在演示中,更改数组列表本身(通过单击"删除最后一个"按钮)会触发"foo"计算属性的刷新,但更改数组中对象的属性则不会.
有什么办法绕过这个问题?
在Ember.js中,是否有一种添加观察者的好方法,该观察者将观察子类实例上的所有更改Ember.Object?
即(咖啡)
Bat = Ember.Object.extend
name: null
age: null
hank = Bat.create
name: 'Hank'
age: 2
#Something like this
hank.addObserverToAll myClass, 'handleChange'
Run Code Online (Sandbox Code Playgroud) 我的组件接收名为"line"的对象属性和名为"name"的字符串属性.
{{field-row line=model name=fieldName}}
Run Code Online (Sandbox Code Playgroud)
line对象有几个属性.以下Ember计算属性"value"返回基于给定行和名称的值:
value: Ember.computed('line', function() {
const line = this.get('line');
const name = this.get('name');
return line.get(name);
})
Run Code Online (Sandbox Code Playgroud)
这样可行,但对线对象属性的任何更新都不会自动触发组件模板上的刷新.我想这是因为对'line'对象的引用在其属性内容发生变化时保持不变.由于事先无法知道属性的名称,我尝试了这个,但它也不起作用:
value: Ember.computed('line.@each', function() {
const line = this.get('line');
const name = this.get('name');
return line.get(name);
})
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?