很明显如何提供特定于路线的数据,即通过使用控制器:
PostController = RouteController.extend({
layoutTemplate: 'PostLayout',
template: 'Post',
waitOn: function () { return Meteor.subscribe('post', this.params._id); },
data: function () { return Posts.findOne({_id: this.params._id}) },
action: function () {
this.render();
}
});
但是,如何为应用程序提供一般数据?在每个路由都需要订阅相同的信息子集的情况下,因此不需要在每次路由更改时重新执行pub / sub。谢谢!
答案 0 :(得分:1)
在我看来,您正在寻找一个完全通用的发布/订阅方案,这样您就不必为每个单独的路由或路由控制器定义waitOn
/ data
选项组合限定。在这种情况下,您可以简单地在服务器上发布一组给定的数据,如下所示:
Meteor.publish('someData', function() {
return SomeDataCollection.find({});
});
并在客户端上订阅该组数据,如下所示:
Meteor.subscribe('someData');
使用此发布/订阅对设置,您将可以访问所有路由中提供的数据。您只需确保在代码中检查不存在的数据,以便在尚未在客户端上加载数据时处理任何给定模板的第一次加载。通过这种方式,您永远不必为任何路由或路由控制器实际定义waitOn
和data
选项。
如果您希望以不同于路由控制器的方式使用Iron Router,您还可以选择使用Router.configure({});
函数全局等待一个/多个订阅。要使用上面的例子:
Router.configure({
waitOn: function() {
return Meteor.subscribe('someData');
}
});
有关此路线选项以及您在全球级别提供的所有其他选项的信息,请检查this。