2016-12-14 8 views
2

購読が自動実行で再表示されるため、テーブルがちらつきます。 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(); 
    }, 
}); 

meteor guide

からサーバーを明示的に待機します。ここでのアイデアは、 は、希望の場合は、新しいデータが用意されている まで、古いサブスクリプションのデータを表示し続けることができます。その後、新しく サブスクリプションの完全なデータセットに瞬時に切り替えます。

一般的に、サブスクリプションを変更すると、購読が過多になっている期間となり、厳密に要求するよりも多くのデータがクライアント にあります。これは、 を購読している(「オーバーフェッチ」していない)同じデータを常に取得する必要がある理由の1つです。

新しいデータが準備完了するまで古いサブスクリプションのデータを表示してから、すぐに新しいサブスクリプションの完全なデータセットに切り替える必要がありますが、どうすればよいですか?

+1

[meteorhacks:subs-manager](https://atmospherejs.com/meteorhacks/subs-manager)を使用してみましたか? – JeremyK

+0

次に、サブスクリプションの準備ができたら新しい値を保持し、それまでは古い値を保持する反応変数をいくつか作成します。あなたの問題は、あなたがサブスクリプションとデータフェッチのために同じ反応変数に依存しているという事実のようです。 – MasterAM

+0

@MasterAMそれは良いアイデアですが、うまくいきません。上記の編集を参照 – Simon

答えて

0

この問題を解決するための最善の解決策は、次のような、サブスクリプション・キャッシング・パッケージを使用することです:ccorcos:subs-cache

meteorhacks:subs-manager

  • meteorhacks:subs-manager
  • だった元の溶液、および1つですArunodaによって開発された多くのパッケージのうちの1つです。それは堅実な選択ですが、もはや積極的に維持されていないことに注意してください。

    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); 
        } 
    }); 
    
+0

どのように私たちはmeteorhacksを知っていますか:サブマネージャーはノーですもっと長く維持されていますか?最後のコミットは2016年3月21日でした。 – Simon

関連する問題