我遇到了一个问题,即父#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);
}
}
});
}
答案 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);
});
}
}