在.property()中指定动态字符串

时间:2014-05-22 17:40:18

标签: ember.js

我试图这样做,但它不起作用

App.FacetCheckboxView = Ember.Checkbox.extend({
    facetName: null,
    facetValue: null,
    checked: function () {
        var s = this.get('facetValue');
        var selected = this.get('controller.' + this.get('facetName'));

        return selected.contains(s);

    }.property('controller.'+ this.get('facetName') +'.@each')

})

如果我在属性方法参数中使用静态字符串,它确实有用。是否有其他方法可以实现相同的目标?

1 个答案:

答案 0 :(得分:1)

当然,您可以在init

上定义计算属性
App.FacetCheckboxView = Ember.Checkbox.extend({
  init: function(){
    this._super();
    Ember.defineProperty(this, 'checked', Ember.computed(function() {
         var facetValue = this.get('facetValue'),
             options = this.get('controller.' + this.get('facetName'));
         return options.contains(s);
    }).property("controller." + this.get('facetName') + ".[]", 'facetValue'));
  },
  facetName: null,
  facetValue: null

});

我做了一个例子,我不完全确定你是否正在使用这个视图,但它应该让你走上正确的道路。

http://emberjs.jsbin.com/vopewayo/1/edit

就个人而言,似乎更容易将值定义为字符串,但作为集合,但我不确定您的确切用例。