現在、すべての子が表示されるように jqGrid ツリーグリッドをツリーの第 3 レベルに自動展開しようとするのに苦労しています。現在のデータ セットは数千または行の深さであり、展開が要求されたときに各ノードを動的にロードする必要があったため、グリッドをリロードする必要がありました。ツリーが再表示されたときにノードを再展開できるように、展開されたノード ID は保存されたツリー状態として配列に保存されます。これは、拡張が発生したときにデータベースから各ノードをロードするプロセスを経ます。AS 各ノードは動的にロードされ、拡張された gridComplete および loadComplete イベントは期待どおりに処理されます。
セーブ ツリーの状態と既存のロジックを利用して、既存のロジック内で適切にツリーを分割することにより、第 3 レベルの拡張をトリガーしようとしています。私たちが経験している問題は、ツリーを処理するために十分な速度で展開できず、ツリーを完全に分割できないことです。
親を繰り返し処理して、展開する適切な ID を取得する関数を次に示します。
function ExpandGridLevel(level) {
if (ExpandGridLevels == false) {
ExpandTotalLevels = level;
ExpandLevelCurrent = 0;
ExpandGridLevels = true;
}
if (!TreeExpandState) {
TreeExpandState = new Array();
}
$(".treeclick", "#Grid").each(function () {
if ($(this).hasClass("tree-plus")) {
var id = $(this).parents("tr").attr("id");
var rowLevel = $("#MaGrid").getLocalRow(id);
if (rowLevel.level == ExpandLevelCurrent) {
TreeExpandState.push(id);
$(this).removeClass("tree-plus");
$(this).addClass("tree-minus");
}
}
});
$(this).trigger("reloadGrid");
$("#Grid").jqGrid("setGridParam", { datatype: "local" });
ExpandLevelCurrent++;
RefreshGrid();
}
コードの gridComplete および loadComplete セクション:
loadComplete: function (data) {
$("#Grid").jqGrid("setGridParam", { datatype: "local" });
if (TreeExpandState.length == 0) {
setTimeout(function () { ExpandGridLevel (ExpandTotalLevels); }, 3000);
}
}
gridComplete: function () {
if (TreeExpandState) {
var rowId = TreeExpandState.shift();
ExpandNode(rowId);
}
}
私たちがやろうとしていることはjqGridで可能ですか? もしそうなら、ツリーの拡張が本当に完了したことをどのように知ることができ、消費されたグリッドを繰り返して次のレベルの親の拡張を開始できるのでしょうか?