流星动态订阅的最佳实践

时间:2015-06-08 19:11:50

标签: meteor

是否有可能在Meteor中执行类似“过滤订阅”的操作:例如,如果您在6月份有过滤器并切换到7月获取新数据并订阅它?

我尝试过类似的事情:

Meteor.publish("report", function (query, opt) {
    return Report.find({ 'timestamp' : { $gte : query.from, $lt: query.to }}, options);
}

在有铁路由器的客户端上:

HomeController=RouteController.extend({
    template:"home",
    waitOn:function(){
        var dates = getDates();
        return Meteor.subscribe("report", dates);
    },
    fastRender: true
});

但它不起作用。

有更好的动态订阅方法吗?或者它只是帮助用url模式导航?

感谢

1 个答案:

答案 0 :(得分:2)

  

有更好的动态订阅方法吗?

有一种使用模板订阅的替代方法,例如下面的示例。我不认为它更好,只是不同。

  

或者它只是帮助用url模式导航?

如果你想处理路由器中的订阅,那么在URL中存储订阅查询参数确实有帮助,并且在我看来有一些额外的好处。但这取决于您所需的应用行为。

使用Template Subscriptions方法:

此Meteor Pad示例将根据选择订阅一系列数据: http://meteorpad.com/pad/26dd8YQevBbA5uNGA/Dynamic%20Subscription

使用铁路由器方法:

此路由示例将根据URL进行订阅。 "项目/ 0/10"将订阅itemData,范围为0到10.

Router.route('Items', {
  name:'Items',
  path:'items/:low/:high',
  subscriptions : function(){
    var low = parseInt(this.params.low);
    var high = parseInt(this.params.high);
    return [ 
      Meteor.subscribe("itemData",low,high),
    ];
  },
  action: function () {
    if (this.ready()) {
      this.render();
    } else {
      this.render('Loading');
    }
  }    
});

我认为这两种方法都很好,取决于你的界面。使用URL很好,因为您可以直接提供链接到数据范围的链接,使用浏览器中的前进和后退按钮,有利于分页数据列表。 模板订阅方法可能适合更改图表上的数据。

您遇到的具体问题可能是由于您的getDates()不是被动的,因此订阅仅在首次运行路由waitOn时运行一次。