【问题标题】: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-managersubs-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')

【问题讨论】:

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

标签: templates meteor publish-subscribe


【解决方案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);
         }
       }
    }
    

    【讨论】:

    猜你喜欢
    • 2015-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-02
    • 2016-02-17
    • 2012-10-01
    • 2020-10-21
    • 1970-01-01
    相关资源
    最近更新 更多