【发布时间】: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();
},
});
服务器显式等待,直到所有数据都被发送下来(新的 订阅已准备好)在删除之前为新订阅 来自旧订阅的数据。这里的想法是避免闪烁——你 如果需要,可以继续显示旧订阅的数据,直到 新数据准备就绪,然后立即切换到新数据 订阅的完整数据集。
这意味着一般来说,在更改订阅时,会有 是您超额订阅并且有更多数据的时期 客户比你严格要求的。这是一个非常重要的 为什么您应该始终获取与您拥有的相同数据的原因 订阅(不要“过度获取”)。
我想“继续显示旧订阅的数据,直到新数据准备好,然后立即切换到新订阅的完整数据集”,但我该怎么做?
【问题讨论】:
-
您是否尝试过使用meteorhacks:subs-manager?
-
然后创建几个反应变量,它们将在订阅准备好时保存新值,并在此之前保存旧值。您的问题似乎是您依赖相同的反应变量进行订阅和数据获取。
-
@MasterAM 这是个好主意,但它不起作用。见上面的编辑
-
请分享相关的模板标记。
-
我在github.com/aslagle/reactive-table使用aslagle的反应表
标签: meteor meteor-blaze