1

ここにあるツリー/展開折りたたみ SlickGrid の例に基づいて構築しています

(% Complete 列に) 並べ替えを追加しましたが、ユーザーによって並べ替えがトリガーされると、フィルターは更新されません。展開/折りたたみアイコンが機能せず、間違った場所にあります。

ソート後にファイラーを再適用するにはどうすればよいですか? 以下のコードを使用してみましたが、うまくいきません。

 dataView.setFilter(myFilter);
 grid.render();

私がここに持っているもののフィドルを見ることができます

更新 jsFiddle ページを開くと、html セクションが空白で表示されることに気付きました。ページを更新すると、コードが表示されるようです。

更新 醜い回避策を作成することができました。ここで更新された例を見つけることができます

基本的に、データを並べ替えてから、グリッドを破棄して再作成します。問題に対するよりエレガントな解決策があるかどうかを知りたいです。

4

1 に答える 1

0

私のマシンでは実際にはフィドルリンクは実行されませんが、ソースコードを読んでから、DataViewを再構築するか、DataViewを強制的にフィラーにトリガーして、すべてのインデントと折りたたみ/展開要素を再作成する必要があります.

リフレッシュを強制する最も簡単な方法は、呼び出しのgrid.invalidate()後にgrid.render(). それがうまくいかない場合は、updateItem()ソートされている各要素を呼び出すことができます。これらのいずれかにより、グリッドは行インデックスとそれらのインデックスのビジュアルを強制的に再計算します。

親関係は行の順序付けに強制されないため、並べ替えには注意する必要があることに注意してください。別名、アイテム (id 2) の子 (id 5) は、その親の上にある行 1 に再配置され、親はまだそれを消します。並べ替えアルゴリズムがこれを既に処理しているように見えますが、質問を読んでいる他の人にとっては重要なポイントです。

于 2013-04-25T17:10:54.090 に答える