我有一个组件,它提供了模型的每个记录('data'),以及定义要使用的记录属性的'meta'信息,并将其呈现给表。在组件中,我正在尝试将基础记录属性绑定到每个UI元素{{tdVal}}:
B = cell2mat(A.').';
不幸的是,这只是在UI中呈现[对象对象]。为了进行比较,以下内容可以正确呈现所有项目,但显然不会绑定:
tdVal : function(){
return Ember.computed.alias('data.' + this.get('meta').get('field'));
}.property()
我是以完全错误的方式解决这个问题吗?非常感谢任何帮助。
更新
为了增加清晰度,如果我绑定到文字键而不是从元信息派生的属性键,我仍然有完全相同的问题,所以我不认为这是使用派生键的问题:
tdVal : function(){
return this.get('data').get(this.get('details').get('field'));
}.property()
更新
如果我将对组件的绑定设置为属性而不是分配给属性的函数,那么它可以工作。问题是我无法做到这一点,因为别名的关键需要派生而不是文字:
tdVal : function(){
return Ember.computed.alias('data.partner_id');
}.property()
答案 0 :(得分:1)
我找到了解决方法。我认为由于时序问题,从函数返回时计算的别名失败了。相反,我将它添加到init()
export default Ember.Component.extend({
tagName : '',
init: function(){
this._super();
this.set('tdVal', Ember.computed.alias('data.' + this.get('details').get('field')));
}
});
这已经成功了,所有内容都应该呈现,UI的更新会反映在模型中,反之亦然。
答案 1 :(得分:0)
第二种方式看起来正确。它没有绑定,因为你没有提供绑定到的属性:
tdVal : function(key, value){
var path = 'data.' + this.get('details.field');
if (value)
this.set(path, value);
return this.get(path);
}.property('data', 'details.field')