对象属性的Ember计算属性

斯蒂芬

我的组件收到一个名为“ 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);
})

这可行,但是对线对象属性的任何更新都不会自动触发对组件模板的刷新。我猜这是因为对“行”对象的引用在属性内容更改时保持不变。由于无法预先知道属性的名称,因此我尝试了此操作,但它也不起作用:

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

有任何想法吗?

错觉

编辑:以下内容曾经可以使用,但并非框架作者想要的。不要使用setdefineProperty而要使用看到这个问题

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

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第二

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章