Methods 助手如何从Meteor中的方法返回值?

Methods 助手如何从Meteor中的方法返回值?,methods,meteor,helper,Methods,Meteor,Helper,我用的是流星1.0.5 我想要一个助手,它从一个方法返回一些值,但只发现助手同步返回值,而方法返回值 异步的。我不知道怎么处理这件事 例如,我需要一个助手来返回所有帖子的计数,我编写了一个方法来返回“posts.find().count()”来帮助助手,因为我不想将所有帖子发布到客户端。但是,正如前面所说的,它不起作用。不确定我是否明白你的意思。。但你可以这样做: Template.postsList.helpers({ posts: function() { return Posts.find

我用的是流星1.0.5

我想要一个助手,它从一个方法返回一些值,但只发现助手同步返回值,而方法返回值 异步的。我不知道怎么处理这件事


例如,我需要一个助手来返回所有帖子的计数,我编写了一个方法来返回“posts.find().count()”来帮助助手,因为我不想将所有帖子发布到客户端。但是,正如前面所说的,它不起作用。

不确定我是否明白你的意思。。但你可以这样做:

Template.postsList.helpers({ posts: function() { return Posts.find(); } });

Template.postsList.helpers({ postsCount: function() { return Posts.find().count(); } });
第一个助手返回您的“posts”数据,而第二个助手只返回“count”数字(我猜这就是您要查找的,对吗?)

为了确认它正在工作,我只是简单地将{{postsCount}}添加到一个随机html(如posts_list.html)文件中,它显示了正确的帖子数量


干杯。

我认为您应该编写一个新的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();
        }
      })
}
下面是一个示例

您可以使用闭包:

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


如果该值只需要在模板中计算一次,而不需要在记录列表中计算一次,那么这种方法就可以了。您不应该对长列表中的每条记录执行一次服务器调用,而是希望所有这些计算都作为订阅的一部分进行

对不起,我想我错过了重要的一点。在我的示例中,服务器只发布一部分文章,而不是全部,但您的代码只返回客户端上的文章计数,而不是服务器上的文章计数(真计数)。谢谢您。您使用会话作为临时反应存储来保存该值,我相信它在我的情况下会起作用。我对你关于Meteor.publish方法的建议很感兴趣。正如我所知,Meteor可以发布集合的一个子集,但它如何发布派生集合,比如说,在本例中,集合“posts”的计数?您只想发布一个数字吗?为什么不更好地使用集合进行发布,如下所示,在服务器上发布post上的金额,在客户端,像在helper
集合上一样进行计数。find().count()
,这更简单,server publish client subscribe and countthenks@Ethaan。但是出版这本书对我来说并不好。在标题或布局中,我希望显示所有某种数据的计数,但仅显示计数。发布少量的所有数据可能不够好,谢谢。您的解决方案与@Ethaan的解决方案具有相同的精神,并且您的建议非常重要,也许,是的,我不希望我的应用程序看到方法返回值。我会尝试其他方法来做。