对象属性

时间:2015-07-02 20:17:11

标签: ember.js

我的组件接收名为“line”的对象属性和名为“name”的字符串属性。

{{field-row line=model name=fieldName}}

线对象有几个属性。以下Ember计算属性“value”返回基于给定行和名称的值:

value: Ember.computed('line', function() {
    const line = this.get('line');
    const name = this.get('name');
    return line.get(name);
})

这样可行,但对线对象属性的任何更新都不会自动触发组件模板上的刷新。我想这是因为对'line'对象的引用在其属性内容发生变化时保持不变。由于事先无法知道属性的名称,我尝试了这个但是它也不起作用:

value: Ember.computed('line.@each', function() {
    const line = this.get('line');
    const name = this.get('name');
    return line.get(name);
})

有什么想法吗?

1 个答案:

答案 0 :(得分:6)

编辑:以下用于工作,但不是框架作者的意图。而不是使用set,而是使用defineProperty。见issue

好吧,如果您提前知道所有可能的属性,可以使用大括号语法:

value: Ember.computed('line.{length,width}', function(){
    var line = this.get('line');
    var name = this.get('name');
    return line.get(name);
  }) 

这个JSBIN演示了

但是,如果你想要真正的动态行为:

export default Ember.Component.extend({

  value:null,
  initialize: function(){
    var name = this.get('name');
    var key = "line." + name;
    this.set('value', Ember.computed(key, function(){
    var line = this.get('line');
    var name = this.get('name');
    return line.get(name);
  }));
  }.on('init')

});

JSBIN numero dos