1

私が抱えている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"]
});
4

1 に答える 1

0

各コピー、移動、削除操作の後、両方の jstree に対して更新関数を呼び出してみてください。

$("#leftjsTree").jstree("refresh" ,"#idOfLeftNode");
$("#rightjsTree").jstree("refresh" ,"#idOfRightNode");
于 2012-07-07T22:23:24.783 に答える