DojoストアOnDemandGrid
からのデータを表示するために dgrid を使用しています。JsonRest
これはうまくいきますが、グリッドに変更されたデータを自動的に表示させたいです。どのデータが変更されたかをサーバーがすべてのクライアントに通知するプッシュ ベースのアプローチを実装するのは非常に手間がかかるため、クライアント ベースのソリューションを探しています。dgrid を使用するrefresh()
と、ちらつきが発生し、グリッド全体がリセットされるため、役に立ちません。
これまでのところ、2 番目のストア インスタンスからすべてのデータを定期的にフェッチし、これをライブ ストア インスタンスと比較し、Observable
ストア ラッパーを使用して変更されたデータをグリッドに通知することをお勧めします。
より優れた、よりエレガントなソリューションはありますか? そうでない場合、どうすればこれを最善に行うことができますか?
編集:このアプローチの問題は、グリッドに現在表示されている行を知ることです。私のアプリは大量のデータを扱うので、2 つの道場ストアでセット全体を同期するのは得策ではありません。グリッドに現在表示されている行を確認する方法はありますか? 理想的には、グリッドは現在表示されている行のデータを定期的に再要求するだけです。そんなに難しいことではありませんよね?
edit2:これまでの私の最善のアプローチは、ストアを「ハッキング」して、Observable
へのすべての呼び出しを追跡することobserve
です。次に、観察したクエリを定期的に再実行し、変更をライブ ストアにマージします。問題は、dgrid があまりにも多くのオブザーバーを開いたままにしておくと、これがスムーズに機能しないことです。それらのいくつかを閉じるので、私のコードにはエラーがなく、farOffRemoval
500 に設定しました (これよりも低い値と高い値も試しました)。
これはこれまでの私のコードです: https://gist.github.com/3225927
どこも終わっていませんが、問題の場所を示すのに十分なデバッグ情報が表示されます。おそらく誰もこれを設定したくなく、jsfiddle に dgrid がないため、1000 エントリのグリッドでスクロールした後、約 10 ~ 15 のオブザーバーとobserverStats.abs (少なくとも観察されたすべての行の数) があることがわかります。 1 回) は約 750 です。