【问题标题】:Meteor: Difference between Subscribe and DataMeteor:订阅和数据之间的区别
【发布时间】:2014-10-10 17:21:18
【问题描述】:

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

这些方法之间到底有什么区别?

【问题讨论】:

    标签: routing meteor publish-subscribe iron-router


    【解决方案1】:

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

    客户端:

    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。这给我们带来了 2 个好处:

    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/

    【讨论】:

    • 感谢您的回答,这已经很有帮助了。我已阅读您推荐的文章,但我仍然不太确定 data-property 的作用以及是否有必要在将集合用于数据之前订阅它。
    • 通过执行:mrt remove autopublish 删除包autopublish,然后不要订阅waitOn,然后尝试在data 中执行Authors.find()。您不会收到任何数据,因为它们不会通过订阅发送给客户。
    【解决方案2】:

    'data' 设置正在渲染的模板的上下文。 Handlebars 让您可以像这样从上下文中读取属性 - {{ someProperty }}。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-14
      • 2013-03-13
      • 1970-01-01
      • 2020-09-18
      • 2021-01-04
      • 1970-01-01
      • 2020-02-16
      • 1970-01-01
      相关资源
      最近更新 更多