我在控制台中收到错误,说在尝试在控制器上的属性中调用服务方法时未定义服务。
[assembly: AssemblyInformationalVersion("7.1.0.0 Private (Debug build)")]
错误状态
itemImage: function(){
return this.get('s3').getItemImage(this.get('user.active_auction'),this.get('model.item_image'));
}.property(),
该方法应该转到s3,得到一个项目。
Uncaught ReferenceError: s3 is not defined
我该怎么做才能让它发挥作用?
答案 0 :(得分:2)
如果s3
确实是一项服务。你需要将它注入你的控制器。
import Ember from 'ember';
const { inject, computed } = Ember;
export default Ember.Controller.extend({
s3: inject.service(),
itemImage: computed(function(){
return this.get('s3').getItemImage(this.get('user.active_auction'),this.get('model.item_image'));
}.property(),
});
现在,如果我理解你要做的事情......那个s3
服务似乎正在做一些回复承诺的电话。据我所知,计算属性返回一个承诺并不是一个好的策略。 Reference
现在我认为你可以做这样的事情(如果你需要的东西可以通过一个动作或其他东西开始(例如对于一个名为someAction
的动作的下面的例子):
import Ember from 'ember';
const { inject, computed } = Ember;
export default Ember.Controller.extend({
s3: inject.service(),
image: null,
itemImage: computed('image', function() {
return this.get('image');
}),
actions: {
someAction() {
let self = this;
this.get('s3').getObject({Bucket: self.get('bucketName'),Key: auction_id+'/'+image},function(err,data){
if (err) {
console.log(err, err.stack);
} else {
self.set('image', data);
}
})
}
}
这样,当s3
服务解析对象时,它将image
属性设置为s3对象返回的值。由于itemImage
属性依赖于image
属性,因此每当s3对象更新image
时,它也会更新您可以在模板中使用的计算属性。
希望我帮助过。如果我明白你想做什么,不是100%确定。