Ember与动态计算别名绑定

时间:2015-09-17 09:55:50

标签: ember.js

我有一个组件,它提供了模型的每个记录('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()

2 个答案:

答案 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')