5

新しい行、colNames、および colModel を使用して jqGrid をリロードしようとしています。行データは正常に読み込まれているようですが、列が更新されていないようです。GridUnload と GridDestroy を使用してみましたが、jQuery DOM インスタンスが完全に失われ、データも読み込まれなくなりました。

var grid = $('#my-grid');

if(grid[0].grid == undefined) {
    grid.jqGrid(options);
} else {
    grid.setGridParam(options);
    grid.trigger('reloadGrid');
}

グリッド インスタンスは、他のオブジェクトにパラメーターとして渡されるため、重要です。これらのオブジェクトは、リスナーをアタッチしたり、イベントをトリガーしたりできます。

バージョン4.4.2を使用しています

4

3 に答える 3

7

reloadGridグリッドの本体のみをリロードし、グリッドの作成時に作成される列ヘッダーは変更しません。

列の数を変更する必要がある場合、または古いグリッドの代わりに使用する必要がある場合はcolNamescolModelグリッドを持っているか再作成します。最初にGridUnloadメソッドを使用してから、新しいグリッドを作成できます (grid.jqGrid(data)場合によっては呼び出します)。gridコードのように jQuery セレクターを変数のグリッドにキャッシュした場合は、gridの呼び出し後にもう一度割り当てる必要があるため、 の呼び出しの直後に次のGridUnloadようなことを行う必要があります。grid = $("#grid");GridUnload

詳細とコード例については、回答を参照してください。

于 2013-04-05T14:37:53.470 に答える
1

jqGrid は<table></table>DOM からイニシャルを削除し、それを置き換えるか、参照を忘れているようです (私はそれほど詳しく調べていません)。

したがって、新しいグリッドを作成するたびに、新しいテーブルを再選択する必要があります。$('table#my-grid'). これにより、グリッドのテーブルの参照をアプリの他の部分にパラメーターとして渡したい場合は注意が必要です。

私の回避策には、グリッド参照を削除し、グリッドのラップされた div を元のテーブルに置き換えることが含まれます。次に、新しい colModel と colNames を使用して通常の方法で jqGrid を作成します。

grid.empty();
delete grid[0].grid;
$('#gbox_my-grid').replaceWith(grid);
grid.jqGrid(options);

これは最も整然としたソリューションではありませんが、元の への永続的な参照を保持することができます<table>。ただし、他の jqGrid プラグインがこれによってどのように影響を受けるかはわかりません。

編集

jQuery DataTablesはカスタマイズに適していることがわかり、jqGrid を使用する代わりにこれを採用しました。

于 2013-04-05T16:24:58.937 に答える
1

両方の回答を組み合わせて、機能させるためにいくつかの変更を加えました。

var grid = $('#tableID');

if(grid[0].grid == undefined) {
  grid.jqGrid(options);
} else {
  delete grid;
  $('#tableID').GridUnload('#tableID');
  $('#tableID').jqGrid(options);
}
于 2014-01-15T02:17:44.163 に答える