帮助器如何从Meteor中的方法返回值?

时间:2015-03-30 12:20:45

标签: methods meteor helper

我正在使用Meteor 1.0.5。

我想要一个从方法返回一些值的帮助器,但只是为了找到一个帮助器同步返回值,但该方法返回值 异步。我不知道如何处理这件事。

例如,我需要一个助手来返回所有帖子的数量,并且我写了一个方法来返回' Posts.find()。count()'帮助帮助者,因为我不想将所有帖子发布到客户端。但是,如前所述,它没有用。

3 个答案:

答案 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中。然后模板助手可以获取它。

如果只需要在模板中计算一次值,那么这将正常工作 - 例如,不在记录列表中。您不应该在长列表中为每个记录执行一次服务器调用,而是希望所有这些计算都作为订阅的一部分发生。