在运行时

时间:2016-09-29 11:45:14

标签: ember.js

这是方案

dep = function(){

     cannot put any "this" here
}

obj =  DS.Model.extend({
        response: DS.attr(),
        cp: Ember.computed(dep(), function(){ ...})
    });

只有在模型加载后才知道计算属性;响应是一个包含各种键的json字段。我希望依赖于json的各个部分,在加载模型之后知道什么确切的部分

dep()函数需要访问"这个"但如果它在create指令之外定义则不起作用,如果它被定义为计算属性则不起作用 例如

obj =  DS.Model.extend({
    response: DS.attr(),
    dep:Ember.computed('response', function(){ 
     some computation 
     and for instance 
     return 'response.path1{a,b}';
     }),
    cp: Ember.computed('dep', function(){ ...})
});

不起作用,因为dep没有改变只是'响应'依赖,我们需要对cp和dep应用相同的依赖,这是重言式的,并且不需要dep

另一件不起作用的是

  obj =  DS.Model.extend({
            response: DS.attr(),
            cp: Ember.computed(this.dep(), function(){ ...}),
            dep(){    this.get('response')...  }
        });

任何人都知道如何在运行时设置计算属性的从属键,计算依赖于Model实例

感谢

1 个答案:

答案 0 :(得分:0)

在计算属性相关键中,只能是string或任何返回string的全局函数,但您无法在函数内访问this上下文。

我建议将cpModel移到其他地方。

在模型就绪挂钩中,您可以创建动态计算属性并设置response的相关键。

可能是以下代码将帮助您找到解决方案。我没有这样做过,也许你可以尝试一下。

import DS from 'ember-data';
export default DS.Model.extend({
    response: DS.attr(),
    ready() {
        this._super(...arguments);
        var response = this.get('response');
        //you can write dep() logic here and contstruct dynamic key . You will have access to this context here.
        var newDynamicKey = 'response.path1{a,b}';
        Ember.defineProperty(this, 'cp', Ember.computed(newDynamicKey, function() {
            //do your work and return result
            return 'result';
        }));
    }
});