如何使用客户端提供的条件参数化Meteor服务器发布并正确订阅?

时间:2015-04-07 21:49:12

标签: meteor iron-router

我有一个'Tastings'对象集合,每个对象都包含'when'Date属性。我想发布一些关于这些对象的不同视图。我已将以下内容添加到我的lib / publications.js源代码中。

Meteor.publish('pastTastings', function(now) {
  check(now, Date);
  return Tastings.find({when: {'$lt': now}}, {sort: {when: -1}});
};
Meteor.publish('futureTastings', function(now) {
  check(now, Date);
  return Tastings.find({when: {'$gte': now}}, {sort: {when: 1}});
};

我正在使用Iron Router并在我的lib / router.js源中设置了以下路由:

Router.route('/past', {
  waitOn: function() {
    return Meteor.subscribe('pastTastings', new Date());
  },
  data: function() {
    return {
      tastings: Tastings.find({when: {'$lt': new Date()}}, {sort: {when: -1}});
    };
  }
});
Router.route('/future', {
  waitOn: function() {
    return Meteor.subscribe('futureTastings', new Date());
  },
  data: function() {
    return {
      tastings: Tastings.find({when: {'$gte': new Date()}}, {sort: {when: 1}});
    };
  }
});

在我的模板中,我引用了从'data'函数返回的对象的'tastings'属性,但页面继续加载,就好像订阅或客户端Tastings查询失败一样。

我是否误解了Iron Router和Meteor如何一起发布/订阅?如果是这样,建议的方法是什么?

1 个答案:

答案 0 :(得分:0)

我唯一看到的是IR数据方法的语法问题。尝试直接从它返回一个对象:

Router.route('/past', {
  waitOn: function() {
    return Meteor.subscribe('pastTastings', new Date());
  },
  data: {
    tastings: function(){ return Tastings.find(); }
  }
});

或者,如果您只有这一个数据集,则可以执行data: function() { return Tastings.find(); }