您将如何将订阅管理器与流星的模板订阅一起使用?

Posted

技术标签:

【中文标题】您将如何将订阅管理器与流星的模板订阅一起使用?【英文标题】:how would you use subscription managers with meteor's template subscriptions? 【发布时间】:2015-06-24 22:25:09 【问题描述】:

Meteor 最近引入了模板订阅功能。您现在可以在 Temeplate.xyz.onCreated 调用中调用 this.subscribe,并且只有在服务器准备好订阅后,帮助程序 #if Template.subscriptionsReady 才会为真。

不幸的是,这似乎与subs-manager 或subs-Cache 不兼容

您将如何使用 subs-Cache 代替 this.subscribe 以便订阅管理器生成的订阅 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')

【问题讨论】:

您找到解决方案了吗? 不抱歉,我没有,不过我会加个赏金看看是否有什么好处 【参考方案1】:

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

【讨论】:

【参考方案2】:

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

【讨论】:

你也可以参考discovermeteor.com/blog/template-level-subscriptions

以上是关于您将如何将订阅管理器与流星的模板订阅一起使用?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Angular 和 RxJs 中管理多个顺序订阅方法?

将包管理器与 Domino 和节点模块的位置一起使用

微信模板消息下线后订阅消息是否可以满足各行业通知提醒

流星订阅不更新集合的排序顺序

使用 JMS 代理发布和订阅消息

Spotify 风格的帐户管理与基于订阅的网站