我的组件接收名为"line"的对象属性和名为"name"的字符串属性.
{{field-row line=model name=fieldName}}
Run Code Online (Sandbox Code Playgroud)
line对象有几个属性.以下Ember计算属性"value"返回基于给定行和名称的值:
value: Ember.computed('line', function() {
const line = this.get('line');
const name = this.get('name');
return line.get(name);
})
Run Code Online (Sandbox Code Playgroud)
这样可行,但对线对象属性的任何更新都不会自动触发组件模板上的刷新.我想这是因为对'line'对象的引用在其属性内容发生变化时保持不变.由于事先无法知道属性的名称,我尝试了这个,但它也不起作用:
value: Ember.computed('line.@each', function() {
const line = this.get('line');
const name = this.get('name');
return line.get(name);
})
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
好吧,如果您提前知道所有可能的属性,可以使用大括号语法:
value: Ember.computed('line.{length,width}', function(){
var line = this.get('line');
var name = this.get('name');
return line.get(name);
})
Run Code Online (Sandbox Code Playgroud)
正如这个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')
});
Run Code Online (Sandbox Code Playgroud)