如何在路线之间保持订阅?

时间:2014-07-06 03:48:17

标签: meteor iron-router

如何在IronRouter路由的不同呼叫之间保持订阅开放?

我的应用程序具有类似杂志,问题/页面的层次结构

content/:issue/:page

所以这将是:

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

我想加载" May"的所有内容路由器内的问题,当页面被更改时,不要取消订阅。我看到应用程序出现了一些闪烁,我认为这是由数据重新连接后的延迟引起的。

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

更新:我完全移动了IronRouter路线之外的订阅,现在看来"粘性"。但是我认为订阅在某处取消订阅,所以我不确定这是否是最好的解决方案。它现在也是一个全球订阅"而实际上我希望只有在:issue参数在该路线上发生变化时才能控制发布/取消发布。

1 个答案:

答案 0 :(得分:0)

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

因为当您在路由器中处理它时,页面仅在订阅准备好后才会加载。这会使您的应用程序感觉不那么敏感。

模板:

<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
    };
};

这会导致应用程序更具响应性。在使用缓存来解决使用过的设计问题之前,最好避免缓慢/不良/无响应的设计。