我有一个看起来像这样的模板:
<template name="item_list">
{{#each items}}
<div>{{name}}</div>
{{/each}}
</template>
此模板有一些客户端js代码:
Template.item_list.helpers(
{
items: function() // find items
{
Meteor.call('getId', Meteor.userId(), function(error, result)
{
if(error)
{
console.log(error.message);
}
else
{
console.log(result); // correct id returned
Meteor.call('findItemById', result, function(error, result)
{
if(error)
{
console.log(error.message);
console.log(error.stack);
}
else
{
console.log(result); // this contains 2 objects with the correct values
return result;
}
});
}
});
}
});
});
当我记录结果时,我在控制台中获得了正确的对象,但我的模板仍然是空的。专栏&#34;名称&#34;确实存在于返回的对象中。像这样:
[Object, Object]
0: Object
_id: "Mcqf3Hh2ARH2NJsDB"
name: "item 1"
1: Object
_id: "e9mkxgNqHgM3czMvE"
name: "item 2"
答案 0 :(得分:1)
你必须记住javascript是异步的。在回调中使用“return”时,它不会返回到原始的Method调用。它只会返回回调方法。
您必须使用Session
变量来连接数据并运行初始调用,即创建模板。
Template.item_list.helpers(
{
items: function() {
return Session.get('items');
}
});
Template.item_list.created = function() {
Meteor.call(... function(err,result) {
....
Session.set('items', result);
....
}
}