購読が自動実行で再表示されるため、テーブルがちらつきます。 autorunでsubscribeが再度呼び出されると、データが消え、Data.find()が再び実行されるまで空のテーブルが作成されます。新しいデータが準備されるまでデータを保持するにはどうすればよいですか?Meteorは、新しい購読日が用意されるまで古い購読データを保持します。
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});
},
また、以下のコードでサブスクリプションデータの問題であるかどうかを確認するために、別の方法で試しました。検索が2回実行される前に、テーブルは自動実行後に空になります。すべてのデータが古いサブスクリプションから データを削除する前に、新しいサブスクリプションのために(新しい サブスクリプションの準備ができている)ダウン送信されるまで
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();
},
});
からサーバーを明示的に待機します。ここでのアイデアは、 は、希望の場合は、新しいデータが用意されている まで、古いサブスクリプションのデータを表示し続けることができます。その後、新しく サブスクリプションの完全なデータセットに瞬時に切り替えます。
一般的に、サブスクリプションを変更すると、購読が過多になっている期間となり、厳密に要求するよりも多くのデータがクライアント にあります。これは、 を購読している(「オーバーフェッチ」していない)同じデータを常に取得する必要がある理由の1つです。
新しいデータが準備完了するまで古いサブスクリプションのデータを表示してから、すぐに新しいサブスクリプションの完全なデータセットに切り替える必要がありますが、どうすればよいですか?
[meteorhacks:subs-manager](https://atmospherejs.com/meteorhacks/subs-manager)を使用してみましたか? – JeremyK
次に、サブスクリプションの準備ができたら新しい値を保持し、それまでは古い値を保持する反応変数をいくつか作成します。あなたの問題は、あなたがサブスクリプションとデータフェッチのために同じ反応変数に依存しているという事実のようです。 – MasterAM
@MasterAMそれは良いアイデアですが、うまくいきません。上記の編集を参照 – Simon