2012-01-24 10 views
1

私はjqgridのツリーグリッドを使用しており、要求に応じて子ノードのデータがロードされています。 ユーザーがノード(node1)をクリックして展開し、直ちに別のノード(node2)をクリックすると、第2ノード(node2)の第1ノード(node1)の子が表示され、node2のアイコンが変更されます展開されて表示されますが、ノード1の子のデータがあり、折りたたみnode2は何もしませんが、折りたたまれているnode1はnode2の子として表示されているnode1の子を折りたたみます。jqgridツリーグリッドの複数のノードを展開する

他の誰かがこのような問題に直面しましたか? jqgridのデータはjson形式の隣接モデルです。

+0

[demo](http://www.trirand.com/blog/jqgrid/jqgrid.html)の「バージョン3.3 - >ツリーグリッドの新機能」のデモでも同じ問題があります。これはjqgridのバグですか? – mdprasadeng

答えて

1

jqGridのバグのようです。私はコードを見て、私は問題を理解していると思う。

ユーザが「展開」アイコンthe codeをクリックするたびに、expandRowexpandNodeメソッドを呼び出す実行されます。 expandNodeのコードは、最初に、新しいデータが追加される行を識別するために内部的に使用されるjqGridのtreeANodeパラメータの現在の値を上書きします。次に、サーバーへの新しい要求の,parentid(またはおよびn_right'nested'グリッドモデルの場合)およびn_levelパラメーターが設定され、その後にreloadGridがトリガーされます。

問題は、が後、内部populate方法の開始時reloadGridの処理中に、内部.grid.hDiv.loading性がテストされることであり、それは、次いで、前依然としてペンディング要求秒リロードすることが設定された場合のグリッドはスキップされます。問題は、treeANodeパラメータの値が既に変更されていることです。したがって、最初にノードを出すノードの子として返されたアイテムは、最後にクリックされたノードのノードとして追加されます。私は別の保留中の要求がまだ処理されている場合treeANodeパラメータが第二のクリックによって上書きされないことになるように、次の

} else if (!this.grid.hDiv.loading) { 

にコードのthe lineを変更することをお勧めバグフィックスとして

hereからjquery.jqGrid.src.jsの修正版をダウンロードし、バグ修正後に問題が解決するかどうかをテストできます。問題が解決する場合は、対応するバグレポートを投稿して、the trirand forumに問題を解決する方法を提案します。

もう1つの回避策として、loadui: 'block' jqGridのオプションを使用できます。このオプションは、サーバーに対する保留中の要求の処理中にユーザーの操作を許可しません。

+0

私もコードを調べていましたが、あなたが提案したようにnode2の変更を許可していませんでしたが、reloadGridメソッドで修正が来る場合、jqgridは同時に展開するノードをサポートできます。ありがとうオレグ、私はあなたが助けることができると知っていた:)しかし、複数の展開ノードがサポートされている場合は、より良い修正がされます。 – mdprasadeng

+0

@ user976634:同時のajaxリクエストが許可されるのが良いと思うが、実装は多くのjqGridモジュールの大きな変更に伴って改善されることに同意する。だから私は最初に既存のバグを修正することをお勧めします。 – Oleg

+0

@ user976634:私は[バグレポート](http://www.trirand.com/blog/?page_id = 393/bugs/child-nodes-to-the-wrong-parent-node /#p25778)を使用して、Tonyが問題と推奨されるバグ修正について読んでくれるようにしてください。 – Oleg

関連する問題