流星订阅应该放在我的应用程序中?

时间:2015-07-17 17:09:40

标签: meteor

我目前将我的出版物存储在/server/publications.js中。我想将我的客户端订阅存储在一个中心文件中,就像在/client/subscriptions.js中一样。这是一个很好的设计决定还是比专业人士更有利?感谢

4 个答案:

答案 0 :(得分:4)

您可以订阅Meteor集合的三个主要位置。

全球

在此方法中,您可以在客户端的某个位置的文件中创建订阅。与您的示例一样,subscriptions.js是大多数人的名字。只要它在client文件夹中,就可以了。

Meteor.subscribe("posts");

这方面的优秀候选人是您将在所有或大部分模板上玩的集合。一个类似于Facebook的朋友列表,某种类型的提要。

路由器

如果您使用的是铁路由器或流路由器,您可以根据URL订阅集合。我最喜欢这种方法。它很灵活,但对性能却不太费力。例如:

// Inside lib/router.js
FlowRouter.route('/blog/:postId', {
    subscriptions: function(params) {
        this.register('myPost', Meteor.subscribe('blogPost', params.postId));
    }
});

现在,您可以使用myPost访问所需的数据。非常整洁,您可以根据需要订阅任意数量的东西。

模板

如果您有多个模板,这是最灵活的,也是最费力的。老实说,只是避免这种方法,因为它的工作太多了。有90%的时间我发现自己使用路由器订阅。

Template.posts.onCreated(function () {
  // will re-run when the "limit" reactive variables changes
  instance.autorun(function () {

    // get the limit
    var limit = instance.limit.get();

    console.log("Asking for "+limit+" posts…")

    // subscribe to the posts publication
    var subscription = instance.subscribe('posts', limit);

    // if subscription is ready, set limit to newLimit
    if (subscription.ready()) {
      console.log("> Received "+limit+" posts. \n\n")
      instance.loaded.set(limit);
    } else {
      console.log("> Subscription is not ready yet. \n\n");
    }
  });
});

答案 1 :(得分:1)

如果您只想要全局的,自动激活的订阅,我想您可以。对于一些有意义的小应用程序。随着代码复杂性的增加,您可能希望对订阅进行更细粒度的控制。一般来说,您有三个用于在您的应用中放置订阅的模式(按粒度和控制顺序):

  1. 全球(如您的问题所示)
  2. router - 假设您使用铁路由器
  3. template。另请参阅this post了解其他模板订阅示例。
  4. 虽然社区最近爱上了模板订阅,但我并不准备做出一般性的建议,即他们总是要走的路。当您向上移动订阅层次结构时,您将失去一些控制权,但也会获得可重用性。

    让我们举一个简单的例子 - 想象一下你有一个社交应用程序,你有一个朋友列表。假设大多数路线和模板都假设您的恶魔的用户数据存在。如果每个模板或路由对此列表进行相同的订阅,则最终会导致大量重复,并且可能会导致大量不必要的启动和停止(这会转换为服务器负载和网络带宽)。另一方面,如果你让你的朋友成为全球订阅者,那么这些性能陷阱本可以避免。

答案 2 :(得分:0)

尽可能尝试使用基于模板的订阅。在这种情况下,如果您有/client/templates/home.html,则可以在/client/templates/home.js中添加与该模板相关的订阅。

Template.home.onCreated(function() {
  this.subscribe('somePublication');
});

答案 3 :(得分:0)

根据我的经验,管理订阅的更好方法是使用the template subscription pattern模式

摘自参考文献:

(\d{2}:\d{2}:\d{2}\.\d+)\s+(\S+)\s+(?:(F=\d+)\s+)?(?:(\[[^]]*\])\s+)?(?:(\S+)\s+)?((?:\/[^\/\n]*)*\/\S+)(?:\s+(\d\.\d+))?\s*(.*)