Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ember.js 从属性调用服务方法_Ember.js_Methods_Service_Properties - Fatal编程技术网

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
钩子,但事实证明我不需要这样做,因为可以通过直接在中指定其端点来加载S3资产e> src属性。但感谢您的回答!很高兴我能“帮助”,祝您的余烬应用程序好运!