我的表閃爍,因爲我的訂閱在自動運行中重新記錄。當自動運行中再次調用訂閱時,我的數據將消失,並且我有一個空表,直到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](https://atmospherejs.com/meteorhacks/subs-manager)? – JeremyK
然後創建一對響應變量,在訂閱準備就緒時保留新值,並在此之前保留舊值。您的問題似乎是您依靠相同的無功變量進行訂閱和數據提取的事實。 – MasterAM
@MasterAM這是一個好主意,但它不起作用。請參閱上面的編輯 – Simon