流星仪表板和出版/订阅

时间:2015-12-02 20:16:16

标签: meteor

编辑:由于最初的问题太模糊,我已经更新了它以使其更具体

我想在Meteor中创建一个仪表板,其中显示了有关我的馆藏的一些统计信息(例如,有多少文档,有多少用户......)。我过去几天一直在尝试,但似乎无法找到一个好的/聪明的方式。

我最初刚刚做了以下事情:

Template.dashboard.helpers({
  getProductsCount: function() {
    return Products.find().count();
  }
});

这不起作用。我认为因为它计算了来自minimongo的产品数量,但不确定。

然后我做了以下事情:

  • 在模板助手中,调用方法并获取要在仪表板页面上显示的值(不起作用)
  • 被告知不要将pub / sub机制用于此类指标
  • 通过会话变量工作(确实有效,但在会话变量中存储这种指标数据感觉有点奇怪

然后我读了另一个关于Reactive Variables的SO回复,并尝试了以下内容:

Template.dashboard.helpers({
  getProductsCount: function() {
    return Template.instance().myAsyncValue.get();
  }
});

Template.dashboard.created = function() {
  var self = this;
  self.myAsyncValue = new ReactiveVar("Waiting for response from server");
  Meteor.call('getProductsCount', function(error, asyncValue){
    if (error)
      console.log(error);
    else
      self.myAsyncValue.set(asyncValue);
  });
};

这很有效,但我发现这对于显示产品数量(或任何其他指标)这样简单的事情非常困难。不确定我理解为什么我应该用sth作为反应变量?

然后出于好奇心 - 我尝试了以下(使用 meteor add simple:reactive-method )并且它可以工作:

Template.customerDashboard.helpers({
    getProductsCount: function () {
        return ReactiveMethod.call("getProductsCount");
    }
});

所以这个问题确实是为什么必须使用Reactive变量和方法,就像这样简单。有人可以解释一下吗?

1 个答案:

答案 0 :(得分:0)

如果您只想在视图中显示count,最好的方法是仅返回计数。你根本不需要发布/订阅。你可以使用服务器方法。如果你想显示数据,你可以去pub-sub。你的方法是正确的。