如何在IronRouter路由的不同呼叫之间保持订阅开放?
我的应用程序具有类似杂志,问题/页面的层次结构
content/:issue/:page
所以这将是:
content/may/page1
content/may/page2
content/may/page3
我想加载" May"的所有内容路由器内的问题,当页面被更改时,不要取消订阅。我看到应用程序出现了一些闪烁,我认为这是由数据重新连接后的延迟引起的。
我目前有一个简单的Content.find({})但是有一个明显的延迟似乎是由unsub / pub / sub握手引起的 - 即使内容没有改变。
更新:我完全移动了IronRouter路线之外的订阅,现在看来"粘性"。但是我认为订阅在某处取消订阅,所以我不确定这是否是最好的解决方案。它现在也是一个全球订阅"而实际上我希望只有在:issue
参数在该路线上发生变化时才能控制发布/取消发布。
答案 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
};
};
这会导致应用程序更具响应性。在使用缓存来解决使用过的设计问题之前,最好避免缓慢/不良/无响应的设计。