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

时间:2015-04-17 21:42:26

标签: templates meteor publish-subscribe

Meteor最近推出了模板订阅功能。您现在可以在this.subscribe调用中调用Temeplate.xyz.onCreated,只有订阅从服务器准备好后,帮助程序{{#if Template.subscriptionsReady}}才会成立。

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

显然不兼容

你如何使用sub-Cache代替this.subscribe,以便subsciptions manager制作的订阅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')

2 个答案:

答案 0 :(得分:3)

meteor的next (unreleased) versionconnection有一个TemplateInstance#subscribe选项,我希望您能够将订阅管理器作为“连接”传递。

答案 1 :(得分:1)

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