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

时间:2014-08-17 18:36:46

标签: routing meteor publish-subscribe iron-router

使用Iron Router,我想根据用户所在的页面访问特定数据。 This教程使用Iron Router的一个函数,名为" data"它根据用户所在的页面提供数据。但是还有另一种使用waitOn和订阅的方法。

这些方法之间究竟有什么区别?

2 个答案:

答案 0 :(得分:2)

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

客户端:

this.route('authors', {
  waitOn: function() {
    return Meteor.subscribe('authorList');
  },
  data: function () {
    return { authors: Authors.find() };
  }
});

服务器端(我自己添加的部分):

Meteor.publish("authorList", function () {
  return Authors.find();
});

假设Authors集合有3位作者:

[{name:"Allan"},{name:"Brian"},{"name":"Joe"}]

为了使它变得非常简单,我假设服务器端在authorList发布函数中发布所有作者。

解释

waitOn中,您将返回订阅authorList。这给了我们两个好处:

1)客户端订阅authorList,因此集合Authors中的所有3个文档都将通过DDP发送到客户端。

2)IronRouter可以显示loadingTemplate,直到收到所有数据。

data函数中,您可以返回:

  • 整套(3位作者):

    Authors.find();

  • 或子集(1或2位作者):

    // one author: Authors.find({name:"Allan"});

    订阅数据。

如果没有订阅,则Authors.find()将不会填充数据。

希望有所帮助。 如果不清楚,我建议阅读:https://www.discovermeteor.com/blog/understanding-meteor-publications-and-subscriptions/

答案 1 :(得分:0)

'data'设置正在呈现的模板的上下文。 Handlebars允许您从上下文中读取属性,如{{someProperty}}。

'subscribe'从服务器请求客户端的新收集数据。