私が抱えているjsTreeの問題を解決できることを願っています...最近使い始めたばかりなので、まだ私の足を見つけています。
私は同じページで 2 つの jsTree を使用しており (左側に使用可能なオブジェクト、右側に含まれるオブジェクト)、中央にいくつかのボタンがあり、ユーザーはオブジェクトを左のツリーから右のツリーに、またはその逆に移動できます。私は dnd プラグインを使用しておらず、ユーザーがツリー間でドラッグ アンド ドロップできるようにするつもりもありません。私のデータ構造は、親と子/複数の子の 2 レベルの深さしかありません。
言及するもう1つのことは、あるツリーから別のツリーにノードを移動すると、そのツリーから削除され、別のツリーに作成されることです。
それで、私が抱えている問題は、左側のツリー(親またはその子のいずれか)でノードを選択でき、ボタンをクリックした後に右側のツリーに移動できることです。選択したノードが親の場合、親とすべての子を移動します。選択したノードが唯一の子である場合、親と子の両方が移動します。この例では、このシナリオに固執しましょう。私は次のようにこれを行います:
//Check to see if the parent exists in the right tree, if it doesn't create it
I've left this function call out for now but can post later if required
//Assuming the parent doesn't exist, create the parent in the right tree
$("#treeInc").jstree("create", null, false, { attr: { id: parent.id }, data: $(parent).children("a").text() }, false, true);
//Create the child in the right tree belonging to the parent node
$("#treeInc").jstree("create", $("#" + parent.id), "inside", { attr: { id: child.id }, data: $(child).children("a").text() }, false, true);
//Remove the parent and child from the left tree
$("#treeAvail").jstree("remove", $('#' + child.id));
$("#treeAvail").jstree("remove", $('#' + parent.id));
これですべてうまくいきますが、ノードを左のツリーに戻そうとすると、削除されるべきだと思っていても、親が常にデータに存在しているように見えるという問題があります。これは、実際にコードを呼び出して親を作成するのではなく、子のみを呼び出して、親が見えない状態で単独でぶらぶらしていることを意味します。
したがって、私のロジックは、基本的に正しいツリーに属するノードで親 ID を探すことによって、親が存在するかどうかを最初に確認することです。私はこれまでにいくつかの異なる方法でこれを行ってきましたが、失敗するたびに。
ノードをループするために左側のツリーの「get_json」関数を呼び出しましたが、そこに存在します。左のツリーを最初にロードした配列をループしますが、最初のロードからすべてのノードが含まれており、変更されることはありません。remove の代わりに 'delete_node' を使用しようとしましたが、違いはありません。
それで、私は何を間違っていますか?jsTree からノードを削除した場合、データに関して、そのツリーがなくなったことを確認するにはどうすればよいですか?
助けてください、それは私を怒らせます!!!
私の実際のツリー データは Web サービスから取得されますが、この例では、以下の json 配列で十分です。
availDataCache = [
{ attr: { id: "A_R1" }
, data: "Report 1"
, state: "open"
, children: [{ attr: { id: "A_PSA1" }, data: "Param Set A"}]
}
, { attr: { id: "A_R2" }
, data: "Report 2"
, state: "open"
, children : [
{ attr: { id: "A_PSA2" }, data: "Param Set A" }
,{ attr: { id: "A_PSB1" }, data: "Param Set B" }
]
}
];
$("#treeAvail").jstree({
"json_data": {
"data": availDataCache
},
"core": {
"animation": 0
},
"plugins": ["themes", "json_data", "ui", "core", "crrm"]
});
$("#treeInc").jstree({
"json_data": {
"data": incDataCache
},
"core": {
"animation": 0
},
"plugins": ["themes", "json_data", "ui", "core", "crrm"]
});