【问题标题】:how to keep a subscription open between routes?如何在路线之间保持订阅开放?
【发布时间】:2014-07-07 20:27:09
【问题描述】:

如何在对 IronRouter 路由的不同调用之间保持订阅打开?

我有一个应用程序,它具有像杂志、问题/页面这样的层次结构

content/:issue/:page

所以这将是:

content/may/page1
content/may/page2
content/may/page3

我想在路由器中加载“May”问题的所有内容,并且当页面更改时不要取消订阅。我看到应用程序出现一些闪烁,我认为这是由于重新连接数据时的延迟造成的。

我目前有一个简单的 Content.find({}),但似乎是由 unsub/pub/sub 握手引起的明显延迟 - 即使内容没有改变。

更新:我将订阅完全移到 IronRouter 路由之外,现在它看起来很“粘”。但是我想订阅在某处被取消订阅,所以我不确定这是否是最好的解决方案。它现在也是一个全局订阅”,而我真的希望只有在 :issue 参数在该路由上发生更改时才能控制发布/取消订阅。

【问题讨论】:

  • 也许可以看看subscriptions-manager
  • 谢谢,不知道这一点,似乎做我想做的事。阿鲁诺达是一台机器!也证实了我的怀疑,即订阅即将关闭,尽管似乎不是......

标签: meteor iron-router


【解决方案1】:

在模板级别处理订阅远远优于在路由器中处理。

因为当您在路由器中处理它时,页面只有在订阅准备好后才会加载。这会让您的应用程序感觉反应迟钝。

模板:

<template name="example">
   {{#with data=getData}}
        {{#if $not data.ready}}
             {{> spinner}} Loading...
        {{/if}}
   {{/with}}
</template>

模板助手:

Template.example.getData = function() {
    var ready = Meteor.subscribe('someSubscription', this.issueId).ready();
    var data = collections.example.find();

    return {
        ready: ready,
        data: data
    };
};

这会产生更具响应性的应用程序。在诉诸缓存之类的方法来解决所用设计的问题之前,最好避免使用缓慢/糟糕/无响应的设计。

【讨论】:

    猜你喜欢
    • 2020-10-07
    • 1970-01-01
    • 2019-01-31
    • 2023-03-09
    • 2015-08-24
    • 2019-09-26
    • 2019-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多