【发布时间】:2013-06-27 09:59:47
【问题描述】:
我有一个计算属性,它从另一个属性构建一个数组并返回它。当我用addObject 更新这个数组时,set 显然没有被调用,所以我无法更新原始属性。有没有办法让我也更新 addObject 或 removeObject 上的原始属性?
在这个例子中,我从一个逗号分隔值的字符串构建一个数组:
App.MyModel = DS.Model.extend({
someAttribute: DS.attr('string'),
computed: function(key, value) {
var computedArray,
someAttribute;
// getter
if (arguments.length === 1) {
someAttribute = this.get('someAttribute');
computedArray = description.split(',');
return Ember.A(computedArray);
}
// setter
else {
someAttribute = value.join(',');
this.set('someAttribute', someAttribute);
return value;
}
}.property('someAttribute')
});
现在,如果我像这样更新我的计算属性,它会按预期工作:
>>> model.set('computed', ['turtles', 'all', 'the', 'way', 'down'])
['turtles', 'all', 'the', 'way', 'down']
>>> model.get('someAttribute')
"turtles,all,the,way,down"
但是现在如果我这样做,它们(预期)不同步:
>>> model.get('computed').addObject('oh yeah')
['turtles', 'all', 'the', 'way', 'down', 'oh yeah']
>>> model.get('someAttribute')
"turtles,all,the,way,down"
概括我的问题:当计算属性是可变的时,是否可以使计算属性与用于计算它的属性保持同步?如果没有,是否有针对数组的解决方法 (Ember.A())?
我是 Ember 的新手,可能有一些我还不知道的事情发生在幕后,但请赐教;)
【问题讨论】:
标签: ember.js