我有一个包含组件的模板。
// pods/workgroup/template.hbs
...
{{workgroup/member-add
wgId=model.id
store=store
peekUser2Workgroup=peekUser2Workgroup
}}
...
在该组件中,我需要查找商店中是否已存在某些内容。
//somewhere in components/workgroup/member-add/componsent.js
let alreadyInStore = this.store.peekRecord('user2workgroup',u2wId);
我通过将商店注入组件(如上所述)使其成功,这当然是不好的做法 所以我尝试在我的父控制器中创建一个执行商店查找的属性:
//in components/workgroup/member-add/componsent.js
let alreadyInStore = this.get('controller').peekUser2Workgroup(u2wId);
//in pods/workgroup/controller.js
peekUser2Workgroup: function(u2wId) {
console.log(this);
console.log(this.store);
return this.store.peekRecord('user2workgroup',u2wId);
}
只要我将整个商店传递到上面的补偿中,这个工作正常 但是,如果我没有将商店传递给组件,它将被定义为未定义,但从不直接从组件访问(商店仅存在于控制器中)。
登录this
的控制台令我惊讶的是,组件而非控制器this.store
未定义。
所以我已经了解到,使用this
时,当从外部/组件调用函数/参数时,我无法访问控制器本身。
问题是,如何让控制器通过this
引用自身?
或者如何从外部调用参数时访问商店?
我真的需要将控制器本身传递给自己吗?
像这样:
// in component
let alreadyInStore = this.get('controller').peekUser2Workgroup(this.get('controller'), u2wgId);
//in controller
peekUser2Workgroup: function(myself, u2wId) {
console.log(this);
console.log(this.store);
return myself.store.peekRecord('user2workgroup',u2wId);
}
这对我来说似乎很奇怪,而且看起来我只是在转移到控制器的时候,比我最初的转移更多...
Ember:2.0.1 Ember-Data:2.0.0
答案 0 :(得分:3)
不是将商店作为属性传递给组件,而是使用Ember.service注入它,如下所示:
store: Ember.service.inject()
然后,不要传入函数,只需传入你正在查找的id vale:
{{workgroup/member-add
wgId=model.id
}}
现在,您可以在组件中获取记录:
workgroup: function(){
return this.get('store').peekRecord('user2workgroup', this.get('wgId'));
}.property()