【问题标题】:Meteor keep old subscribed data until new subscribed date is readyMeteor 保留旧的订阅数据,直到新的订阅日期准备好
【发布时间】:2017-04-30 07:41:59
【问题描述】:

我的表格闪烁,因为我的订阅正在自动运行中重新订阅。当在自动运行中再次调用订阅时,我的数据会消失并且我有一个空表,直到 Data.find() 再次运行。在新数据准备好之前如何保留数据?

Template.table.onCreated(function () {
  this.autorun(() => {
    if (Session.get('selectedItem') && selectedSubItem.get()) {
      this.subscribe('dataOverview', Session.get('selectedItem'), selectedSubItem.get()._id);
    }
});

Template.table.helpers({
  collection () {
    return Data.find({"item._id": Session.get('selectedItem')._id, "subItem._id": selectedSubItem.get()._id});
  },

我也尝试了另一种方法,看看是否真的是订阅数据的问题,下面的代码。自动运行后,查找第二次运行之前,该表为空。

Template.table.onCreated(function () {
  this.autorun(() => {
    if (Session.get('selectedItem') && selectedSubItem.get()) {
      this.subscribe('dataOverview', Session.get('selectedItem'), selectedSubItem.get()._id, () => {
        let cursor = Prjs.find({"app._id": Session.get('selectedApp')._id,"release._id": selectedRel.get()._id});
        this.tableData.set(cursor);
      });
    }
});

Template.table.helpers({
  collection () {
    return Template.instance().tableData.get();
  },
});

来自meteor guide

服务器显式等待,直到所有数据都被发送下来(新的 订阅已准备好)在删除之前为新订阅 来自旧订阅的数据。这里的想法是避免闪烁——你 如果需要,可以继续显示旧订阅的数据,直到 新数据准备就绪,然后立即切换到新数据 订阅的完整数据集。

这意味着一般来说,在更改订阅时,会有 是您超额订阅并且有更多数据的时期 客户比你严格要求的。这是一个非常重要的 为什么您应该始终获取与您拥有的相同数据的原因 订阅(不要“过度获取”)。

我想“继续显示旧订阅的数据,直到新数据准备好,然后立即切换到新订阅的完整数据集”,但我该怎么做?

【问题讨论】:

  • 您是否尝试过使用meteorhacks:subs-manager
  • 然后创建几个反应变量,它们将在订阅准备好时保存新值,并在此之前保存旧值。您的问题似乎是您依赖相同的反应变量进行订阅和数据获取。
  • @MasterAM 这是个好主意,但它不起作用。见上面的编辑
  • 请分享相关的模板标记。
  • 我在github.com/aslagle/reactive-table使用aslagle的反应表

标签: meteor meteor-blaze


【解决方案1】:

解决这个问题最好的办法是使用订阅缓存包,比如:

meteorhacks:subs-manager 是最初的解决方案,是Arunoda 开发的众多软件包之一。这是一个不错的选择,但请注意,它已不再被积极维护。

ccorcos:subs-cache 本质上是 meteorhacks:subs-manager 的一个分支,修复了一些问题,并且是 currently being maintained

当您在客户端订阅时,这两个包需要稍微不同的语法,并为您的订阅提供缓存,这将消除您在问题中描述的闪烁。

// using ccorcos:subs-cache

let subsCache = new SubsCache({
  expireAter: 5,  // minutes
  cacheLimit: 10
});

Template.table.onCreated(function () {
  this.autorun(() => {
    if (Session.get('selectedItem') && selectedSubItem.get()) {
      subsCache.subscribe('dataOverview', 
                          Session.get('selectedItem'),
                          selectedSubItem.get()._id );
    }
});

【讨论】:

  • 我们如何知道meteorhacks:subs-manager 不再被维护?最后一次提交是在不久前的 2016 年 3 月 21 日
猜你喜欢
  • 2015-11-19
  • 2023-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多