Computed属性,数组和addObject

时间:2013-06-27 09:59:48

标签: ember.js

我有一个计算属性,它从另一个属性构建一个数组并返回它。当我使用addObject更新此数组时,set显然未被调用,因此我无法更新orignal属性。我还有办法在addObjectremoveObject上更新原始属性吗?

在这个例子中,我用一串逗号分隔值构建一个数组:

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的新手,可能还有一些我不知道的东西,但是请赐教;)

1 个答案:

答案 0 :(得分:2)

这可能是设计的,因为默认情况下也会缓存计算属性。因此,即使您设法使其工作,对这些属性的绑定也会有问题。

尽管如此,您可能会设置一个辅助observes函数,然后监视计算属性。您还需要使用固定数组来支持计算属性,这与您在每个getter上返回的新数组不同。

除非它是关键的,否则我会避免违反Ember惯例。

“如果一旦你开始走黑暗的道路,永远它将主宰你的命运”:)