是否有可能在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模式导航?
感谢
答案 0 :(得分:2)
有更好的动态订阅方法吗?
有一种使用模板订阅的替代方法,例如下面的示例。我不认为它更好,只是不同。
或者它只是帮助用url模式导航?
如果你想处理路由器中的订阅,那么在URL中存储订阅查询参数确实有帮助,并且在我看来有一些额外的好处。但这取决于您所需的应用行为。
此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时运行一次。