Routing 流星:订阅和数据之间的差异

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

使用Iron路由器,我希望根据用户所在的页面访问特定数据。本教程使用了Iron Router的一个称为“数据”的功能,该功能根据用户所在的页面提供数据。但也有另一种使用waitOn和订阅的方法


这些方法之间的具体区别是什么?

让我们分析一下您提到的教程中的简单案例:

客户端:

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"}]