3

DojoストアOnDemandGridからのデータを表示するために dgrid を使用しています。JsonRestこれはうまくいきますが、グリッドに変更されたデータを自動的に表示させたいです。どのデータが変更されたかをサーバーがすべてのクライアントに通知するプッシュ ベースのアプローチを実装するのは非常に手間がかかるため、クライアント ベースのソリューションを探しています。dgrid を使用するrefresh()と、ちらつきが発生し、グリッド全体がリセットされるため、役に立ちません。

これまでのところ、2 番目のストア インスタンスからすべてのデータを定期的にフェッチし、これをライブ ストア インスタンスと比較し、Observableストア ラッパーを使用して変更されたデータをグリッドに通知することをお勧めします。

より優れた、よりエレガントなソリューションはありますか? そうでない場合、どうすればこれを最善に行うことができますか?

編集:このアプローチの問題は、グリッドに現在表示されている行を知ることです。私のアプリは大量のデータを扱うので、2 つの道場ストアでセット全体を同期するのは得策ではありません。グリッドに現在表示されている行を確認する方法はありますか? 理想的には、グリッドは現在表示されている行のデータを定期的に再要求するだけです。そんなに難しいことではありませんよね?

edit2:これまでの私の最善のアプローチは、ストアを「ハッキング」して、Observableへのすべての呼び出しを追跡することobserveです。次に、観察したクエリを定期的に再実行し、変更をライブ ストアにマージします。問題は、dgrid があまりにも多くのオブザーバーを開いたままにしておくと、これがスムーズに機能しないことです。それらのいくつかを閉じるので、私のコードにはエラーがなく、farOffRemoval500 に設定しました (これよりも低い値と高い値も試しました)。

これはこれまでの私のコードです: https://gist.github.com/3225927

どこも終わっていませんが、問題の場所を示すのに十分なデバッグ情報が表示されます。おそらく誰もこれを設定したくなく、jsfiddle に dgrid がないため、1000 エントリのグリッドでスクロールした後、約 10 ~ 15 のオブザーバーとobserverStats.abs (少なくとも観察されたすべての行の数) があることがわかります。 1 回) は約 750 です。

4

2 に答える 2

1

定期的にフラッシュ(閉じる/破棄)するだけのCacheStoreを使用できます

http://dojotoolkit.org/reference-guide/1.7/dojo/store/Cache.html

したがって、基本的には、CacheStoreをクリーンアップしてから、クエリをやり直します。

于 2012-08-01T09:04:48.120 に答える
0

何時間も考えた後、問題に対するより良い解決策を見つけました。最初にすべてのデータベース レコードをシードするキャッシュ ストアを作成します (したがって、実際に何百万ものレコードがある場合、これは拡張できない可能性があります)。この Cache ストアは、Observable ストアにラップされ、サーバーをポーリングして変更を更新します (Redis バックエンドでプレーンな HTTP を使用し、WebSocket や Comet のような派手なものは何もありません)。

コード: https://gist.github.com/anonymous/5003727

于 2013-02-21T10:20:32.563 に答える