【问题标题】:Unsubscribe from publication in meteor app取消订阅流星应用程序中的出版物
【发布时间】:2016-09-21 18:58:56
【问题描述】:

我想知道是否有适当的方法来停止客户的订阅。

例如,我有 2 个页面,第一个页面我订阅客户端到 users 发布,第二个我订阅 projects 发布。

当客户从用户页面转到项目页面时,他仍然订阅了用户,尽管他在项目页面上不需要它。

所以我的第一个问题是:它需要内存还是 CPU?当客户订阅越来越多的出版物时,当他从一个路由到另一个路由时。

第二个:退订的正确方法是什么? 例如,当他进入项目页面时,取消订阅用户发布。

我看到的一些软件包可以做到这一点。例如reactive-table

提前谢谢你!

【问题讨论】:

    标签: meteor unsubscribe


    【解决方案1】:

    通常,如果您想停止订阅,您可以使用 Meteor.stop() 来完成。从指南中,关于如何stop subscriptions

    如果您在响应式上下文(例如自动运行或 React 中的 getMeteorData)或通过 Blaze 组件中的 this.subscribe() 有条件地调用 Meteor.subscribe(),则 Meteor 的响应式系统将自动调用 this.stop( ) 在适当的时候为您服务。

    所以通常您不必停止订阅。它是自动完成的。

    -对于您的第一个问题,是的,取决于应用程序,它可能会占用大量 CPU,这就是为什么您希望避免在聊天应用程序中出现多个 pub/sub。

    -对于第二个问题,在您的情况下,您需要做的是模板级订阅而不是路由器级,以便将您需要的数据仅提供给您需要的模板。 See this example 了解如何使用 Flow Router 进行操作,这同样适用于其他路由器。

    Template.blogPost.onCreated(function() {
      var self = this;
      self.autorun(function() {
        var postId = FlowRouter.getParam('postId');
        self.subscribe('singlePost', postId);  
      });
    });
    

    【讨论】:

    • 感谢您的回答。它确实做到了我想要实现的目标。但是现在,它看起来像是在订阅之前呈现了 html。并且没有任何来自助手的数据被渲染。我试过{{#if Template.subscriptionsReady}},但仍然没有结果。你也可以帮忙吗?
    • 很难说。任何地方都可能出现问题。在这种情况下帮助我的是包 msavin:mongol 。使用 ctl+M 您可以在您所在的页面上查看您的订阅内容。所以首先要确保你确实在每个页面上订阅了你想要的集合。
    • @Kostas Dude,你不知道“this.subscribe”与“Meteor.subscribe”信息的价值有多大!!!谢谢
    猜你喜欢
    • 2014-07-24
    • 1970-01-01
    • 2015-05-02
    • 2017-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-26
    • 1970-01-01
    • 2013-08-21
    相关资源
    最近更新 更多