这是方案
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实例
感谢
答案 0 :(得分:0)
在计算属性相关键中,只能是string
或任何返回string
的全局函数,但您无法在函数内访问this
上下文。
我建议将cp
从Model
移到其他地方。
在模型就绪挂钩中,您可以创建动态计算属性并设置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';
}));
}
});