Ember.js 从属性调用服务方法
我在控制台中收到一个错误,表示在尝试调用控制器上属性内的服务方法时未定义服务Ember.js 从属性调用服务方法,ember.js,methods,service,properties,Ember.js,Methods,Service,Properties,我在控制台中收到一个错误,表示在尝试调用控制器上属性内的服务方法时未定义服务 itemImage: function(){ return this.get('s3').getItemImage(this.get('user.active_auction'),this.get('model.item_image')); }.property(), import Ember from 'ember'; const { inject, computed } = Ember; export d
itemImage: function(){
return this.get('s3').getItemImage(this.get('user.active_auction'),this.get('model.item_image'));
}.property(),
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(),
});
错误状态
Uncaught ReferenceError: s3 is not defined
方法应该转到s3,获取一个项
getItemImage(auction_id, image) {
var self = this;
s3.getObject({Bucket: self.get('bucketName'),Key: auction_id+'/'+image},function(err,data){
if (err) {
console.log(err, err.stack);
} else {
console.log(data);
return data;
}
})
}
如果
s3
确实是一项服务,我必须做些什么才能让它正常工作。您需要将其注入控制器
itemImage: function(){
return this.get('s3').getItemImage(this.get('user.active_auction'),this.get('model.item_image'));
}.property(),
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
服务似乎正在进行一些返回承诺的调用。据我所知,让计算属性返回承诺不是一个好政策
现在,我认为您可以这样做(如果您需要的是一个动作或其他什么(下面是一个名为someAction
)的动作的示例):
这样,当s3
服务解析对象时,它会将image
属性设置为s3对象返回的值。由于itemImage
属性依赖于image
属性,因此每当s3对象更新image
时,它也会更新您需要的计算属性可以在模板中使用
希望我能帮上忙。我不能100%确定我是否理解你想要做的事情。s3是在getItemImage中定义的吗?啊,是的,但我没有正确地理解它,我只是认为是控制器对我大喊大叫,但这确实是服务方法。我喜欢这种方法,这里的关键是我需要在模板渲染中获取图像。我正在从
项
路由转换到项
路由,并希望在加载模板时加载该项
的图像。我想我可以使用一些didTransition
钩子,但事实证明我不需要这样做,因为可以通过直接在