2

ExtJS 4.1 を使用しているプロジェクトに取り組んでいます

フィルターを使用してツリー グリッドを実装する必要があります。さまざまな記事、ブログ、SO の投稿を読んで理解したことによると、ExtJS はツリー ストアを使用したフィルター メカニズムを提供していないため、独自のフィルター メカニズムを作成する必要があります。

フィルタリングには、次の 2 つの方法が提案されています。1) ツリー グリッドにデータをロードし、フィルタ条件に基づいてノードを表示/非表示にする 2) ストアを操作する (データをコピーし、ストアからレコードを削除する)

私は最初のアプローチを試みました。テストデータ(約30ノード)で完全に機能していました。しかし、本番データのスナップショットでは、IE と FireFox で「Unresponsive Script」エラーが発生していました。Chrome では問題なく動作していました。

基本的に、本番データベースには大量のデータがあり、ツリー グリッドで約 900 のノードを形成する約 3500 のレコードがあります。ツリー ストアにデータが入力されると、900 個のノードすべてをツリー グリッドにレンダリングしているときに、"Unresponsive Script" エラーが発生するのではないかと思います。

ExtJS は初めてで、この問題に取り組む最善の方法がわかりません。グリッドでフィルタリングがどのように機能するかを知りたいです。ツリー グリッドに同じフィルタリング メカニズムを複製できますか?

この問題に取り組むための提案は大歓迎です。

4

2 に答える 2

1

Tree の代わりに、グループ化で Grid を使用できる場合は、ページネーションでこのようなフィルタリングで Grid を使用できます。そうでない場合は、 TreePanel にも使用できるExt.grid.plugin.BufferedRendererのようなものを使用できますが、4.2 でのみ使用できます。これが解決策でない場合は、ページネーションを処理できる独自のカスタム フィルタリングを作成する必要があります。

于 2013-02-05T19:01:33.990 に答える
0

各ノードの展開イベントで子ノードをロードすることは、ツリー パネルの dom の相互作用を最小限に抑える適切な方法であることがわかりました。そうすれば、フィルタリングするときに、全体ではなく、ツリー構造の最初のレベルのみをフィルタリングする必要があります。私は現在、1 つのツリー パネルで約 350 のリソースを処理し、イベントを通じてそれぞれが約 75 のノードを持つ他の 2 つのツリー パネルを処理しているアクセス制御管理アプリケーションで動作させています。このアプローチには顕著な UI の遅れはありませんが、私はそれをあなたの規模に完全に拡大していません。それがうまくいくかどうかは、ツリーの最初のレベルにあるアイテムの数に大きく依存します.

于 2013-02-05T22:48:10.380 に答える