你将如何使用订阅管理器和 meteor 的模板订阅?

how would you use subscription managers with meteor's template subscriptions?

Meteor 最近推出了模板订阅功能。您现在可以从 Temeplate.xyz.onCreated 调用中调用 this.subscribe 并且助手 {{#if Template.subscriptionsReady}} 只有在订阅从服务器准备就绪后才会为真。

不幸的是,这似乎与 subs-manager or subs-Cache

显然不兼容

如何在 this.subscribe 的位置使用 subs-Cache,以便订阅管理器创建的订阅 ID 进入 this.subscribe 的 _subscriptionHandles 和 _allSubsReady 部分?或以其他方式询问,您如何获得 {{#if Template.subscriptionsReady}} 和函数 Template.instance().subscriptionsReady() 依赖于使用 subs-Cache 进行的模板订阅。

无效的示例代码:

# in some top level file
share.subsCache = new SubsCache( 
  expireAter: 5  
  cacheLimit: 10
)

#in a template file
Template.entryRevisionInfo.onCreated ->
  share.subsCache.subscribe('somePub')

meteor 的 next (unreleased) versionTemplateInstance#subscribeconnection 选项,我希望您能够将订阅管理器作为 "connection."

Sacha Greif 在 Telescope 应用程序中编写了一个解决方案。我试图提取对下面的基本实现很重要的部分。据我了解,它依赖于显式设置模板的就绪状态...在订阅就绪时被动地设置它:

subsManager = new SubsManager();
Template.templatename.onCreated(function () {
   var instance = this;
   instance.ready = new ReactiveVar(false);
   subscription = subsManager.subscribe('yourCollection')
   instance.autorun(function () {
     if (subscription.ready()) {  //reactive
       instance.ready.set(true);
     }
   }
}