我正在使用Meteor 1.0.5。
我想要一个从方法返回一些值的帮助器,但只是为了找到一个帮助器同步返回值,但该方法返回值 异步。我不知道如何处理这件事。
例如,我需要一个助手来返回所有帖子的数量,并且我写了一个方法来返回' Posts.find()。count()'帮助帮助者,因为我不想将所有帖子发布到客户端。但是,如前所述,它没有用。
答案 0 :(得分:1)
不确定我是否明白你的意思..但你可以这样做:
Template.postsList.helpers({ posts: function() { return Posts.find(); } });
Template.postsList.helpers({ postsCount: function() { return Posts.find().count(); } });
第一个帮助者返回你的"帖子"数据,第二个只返回" count"号码(我猜你正在寻找什么,对吗?)
要确认它是否有效,我只是将{{postsCount}}添加到随机html(如posts_list.html)文件中,并显示正确的帖子数。
干杯。
答案 1 :(得分:1)
我认为你应该用你想要返回的查询编写一个新的Meteor.publish方法。
但是如果你想使用Meteor.method
,这可能是一个解决方案。
if(Meteor.isClient){
Template.example.helpers({
count:function(){
return Session.get('playersCount')
}
});
Meteor.call('playersCount',function(err,result){
if(!err){
Session.set('playersCount',result)
}
})
}
if(Meteor.isServer){
Meteor.methods({
'playersCount':function(){
return Players.find().count();
}
})
}
这是一个Meteorpad示例
答案 2 :(得分:0)
您可以使用闭包:
Template.myTemplate.rendered = function(){
closure.init();
};
Template.myTemplate.helpers({
foo: function(){
return closure.value();
}
});
var closure = function(){
var privateValue;
return {
init: function(){
Meteor.call(method,function(err,result){
if ( !err ) privateValue = result;
}
},
value: function(){
return privateValue;
}
}
}();
当渲染模板时,闭包调用Meteor.call
,它将结果异步存储在privateValue
中。然后模板助手可以获取它。
如果只需要在模板中计算一次值,那么这将正常工作 - 例如,不在记录列表中。您不应该在长列表中为每个记录执行一次服务器调用,而是希望所有这些计算都作为订阅的一部分发生。