Routing 流星:订阅和数据之间的差异
使用Iron路由器,我希望根据用户所在的页面访问特定数据。本教程使用了Iron Router的一个称为“数据”的功能,该功能根据用户所在的页面提供数据。但也有另一种使用waitOn和订阅的方法Routing 流星:订阅和数据之间的差异,routing,meteor,publish-subscribe,iron-router,Routing,Meteor,Publish Subscribe,Iron Router,使用Iron路由器,我希望根据用户所在的页面访问特定数据。本教程使用了Iron Router的一个称为“数据”的功能,该功能根据用户所在的页面提供数据。但也有另一种使用waitOn和订阅的方法 这些方法之间的具体区别是什么?让我们分析一下您提到的教程中的简单案例: 客户端: this.route('authors', { waitOn: function() { return Meteor.subscribe('authorList'); }, data: function
这些方法之间的具体区别是什么?让我们分析一下您提到的教程中的简单案例: 客户端:
this.route('authors', {
waitOn: function() {
return Meteor.subscribe('authorList');
},
data: function () {
return { authors: Authors.find() };
}
});
服务器端(我自己添加的部分):
假设作者
集合有3位作者:
[{name:"Allan"},{name:"Brian"},{"name":"Joe"}]
为了简单起见,我假设服务器端在authorList
publish函数中发布所有作者
解释
在waitOn
中,返回订阅authorList
。这给了我们两个好处:
1) 客户端订阅了authorList
,因此集合作者
中的所有3个文档都将通过DDP发送到客户端
2) IronRouter可以显示loadingTemplate
,直到收到所有数据
在data
函数中,您可以返回:
- 整套(3位作者):
Authors.find()代码>
- 或子集(1或2名作者):
//一位作者: 查找({name:“Allan”})代码> 订阅数据的数量
Authors.find()
希望有帮助。
为了防止不清楚,我建议阅读:“数据”设置正在呈现的模板的上下文。Handlebar允许您从上下文读取属性,如-{someProperty}
“订阅”从服务器请求客户端的新收集数据 谢谢你的回答,这已经很有帮助了。我已经阅读了您推荐的文章,但我仍然不太确定data属性的作用,以及在将集合用于数据之前是否有必要订阅该集合。请通过执行以下命令来删除包
autopublish
,mrt Remove autopublish
,然后不要在waitOn
中订阅,然后尝试在data
中执行Authors.find()
。您将不会收到任何数据,因为这些数据不会随订阅一起发送到客户端。
[{name:"Allan"},{name:"Brian"},{"name":"Joe"}]