Meteor - 嵌套由wrapAsync调用填充的每个帮助器不呈现

时间:2015-06-04 21:31:02

标签: meteor

我遇到了一个问题,即父#each生成一个包含异步调用的内部#each。服务器调用返回预期的输入和数组" thumbUrls"每次都正确生成,如console.log()所示。但是,当作为帮助程序返回时,它不存在于模板中。我尝试用期货来做这件事,同样的事情发生了。

模板

<template name="adminThumbnail">
  {{#each video}}
    <div class="row">
      <div class='col-md-12'>
      <h3>{{artist}} - {{title}}</h3>

        <!-- NOT BEING RENDERED AT ALL -->
        {{#each thumbUrls}}
         <img src={{this}}>
        {{/each}}

      </div>
    </div>
  {{/each}}
</template>

客户端

if (Meteor.isClient){
  Template.adminThumbnail.helpers({
    'video': function () {
      return Videos.find({});
    },
  'thumbUrls': function () {
     Meteor.call('listThumbnails', this.keys.prefix, function (err, data) {
       var thumbUrls = [];
       data.Contents.forEach(function (item) {
         thumbUrls.push(Meteor.settings.public.CLOUDFRONT_URL + item.Key);
       });
       /* ARRAY IS BEING GENERATED CORRECTLY */
       console.log(thumbUrls); 
       return thumbUrls;
      });
    }
  });
}

服务器

if (Meteor.isServer) {
  Meteor.methods({
   listThumbnails: function (prefix, cb) {
     var params = {
     Bucket: Meteor.settings.AWS.BUCKET_NAME,
     Prefix: prefix + 'thumb'
   }
   var s3 = new AWS.S3();
   var listObjectsSync = Meteor.wrapAsync(s3.listObjects, s3);
   try {
     return listObjectsSync(params);
   } catch (e) {
   console.error(e);
   }
  }
 });
}

1 个答案:

答案 0 :(得分:1)

你的thumbUrls助手没有返回任何东西。您调用的返回是call的回调函数的返回,而不是辅助函数的回调函数。而且你也不能在那时从助手那里返回任何东西,因为你在异步分支中。

改为使用Session变量:

Session.setDefault('thumbUrls', []);
if (Meteor.isClient){
    Template.adminThumbnail.helpers({
        'video': function () {
            return Videos.find({});
        },
        'thumbUrls': function () {               
            return Session.get('thumbUrls');
        }
    });


    Meteor.startup(function() {
            Meteor.call('listThumbnails', this.keys.prefix, function (err, data) {
                var thumbUrls = [];
                data.Contents.forEach(function (item) {
                    thumbUrls.push(Meteor.settings.public.CLOUDFRONT_URL + item.Key);
                });
                /* ARRAY IS BEING GENERATED CORRECTLY */
                console.log(thumbUrls); 
                Session.set('thumbUrls', thumbUrls);
            });

    }
}