根据属性数组定义Ember计算属性

时间:2013-11-28 02:23:14

标签: javascript ember.js

我正在尝试定义一个依赖于一组属性的计算属性,这些属性被指定为数组。该示例在this fiddle

中给出
var MyObject = Ember.Object.extend({
    properties: ['red', 'blue'],

    red: 'i am red',
    blue: 'blue am i',

    defineMagic: function () {
        var thiz = this;

        Ember.defineProperty(thiz, 'magic', Ember.computed(function () {
           console.log('i am called');
            return thiz.getProperties(thiz.get('properties'));
       }).property(thiz.get('properties').toString()/*what goes here */));
   }
});

到目前为止,我已经使用Ember的defineProperty方法来定义计算属性。但是,如果基础属性发生变化,计算属性不会重新计算,如小提琴中的注释中所述。一定要激活控制台,因为我试图验证控制台输出。

这在Ember中是否可行,如果可以的话;怎么用?

1 个答案:

答案 0 :(得分:0)

你可以用Function#apply的魔力来做到这一点。 apply通过将传递的数组转换为参数列表来调用函数。 (Function#call,另一方面,采用正常的逗号分隔的参数列表)。试试这个:

var func = function () { return this.get('properties'); };
var args = this.get('properties').concat([func]);

Ember.defineProperty(this, 'magic', Ember.computed.apply(this, args));

这相当于

Ember.defineProperty(this, 'magic', Ember.computed('red', 'blue', func));

另外:在计算属性this中引用它所属的对象,因此您不希望引用that / thiz等来访问对象

相关问题