4

私は jsTree の初心者です。デュアル jsTree を使用したいと考えています。

[左 JsTrree] [ >> ] [右 JsTrree]

">>" : 選択したノードを左から右にコピーするためのボタン jsTree

部分的なツリー階層を左から右にコピーしたい jsTree.

  • ノードの重複はありません。
  • 選択したノードの子ノードをコピーしたくない
  • 右側の jsTree 構造に従って、左側の jsTree から選択されたノードのみが右側の jsTree にマージされます

ユーザーが左側の jsTree から任意のノードを選択した場合、ボタン (">>") で [選択したノードからルート ノードに部分ツリーをコピーしたい] をクリックします。

次のように jsTree を残します"

 Root
     -----A
          -----A1
               -----A1.1
               -----A1.2
          -----A2
               -----`A2.1`
               -----A2.2

     -----B
          -----B1
          -----B2

     -----C
          -----C1
               -----C1.1
               -----C2.2

-------------------------------------------------- ------------------------------------
ここで、ユーザーがノード A2.1 を選択したと仮定し、次に button("> >") 次の部分ツリーをクリックすると、右側の jsTree に表示されます

[#1] 右の jsTree:

 Root
     -----A
          -----A2
               -----`A2.1` 

ルート ノードが右側の jsTree に追加され、選択されたノードのみが右側の jsTree にマージされるようになりました。

-------------------------------------------------- ------------------------------------

ここで、ユーザーが C1 を選択したと仮定すると、C1 のみが正しい jsTree にマージされます。

[#2] 左の jsTree から C1 を追加した後の右の jsTree 構造:

Root
     -----A
          -----A2
               -----A2.1 
     -----C
          -----`C1`

ユーザーが A1 を選択したと仮定すると、A1 は適切な場所にマージする必要があります
[#3] A1 が左側の jsTree から追加された後の右側の jsTree 構造:

Root
     -----A
          -----`A1`
          -----A2
               -----A2.1                   
     -----C
          -----C1

今までの私の回避策は次のとおりです

左のjsTreeからノードを選択した後、選択したノードからルートノードまでxmlを構築しています。そして生成された partial_xml_string が Cookie に保存されます。(">>") ボタンの OnClick Cookie から partial_xml_string の値を読み取っています + partial_xml_string の Cookie 値をクリアしています。[#1] ケースは適切に処理されます。[#1] ケースを達成する他の良い方法はありますか?

.get_path ( node , id_mode ) を使用して、ルートからリーフ ノードへのパス (ID と名前) を取得しています

id_mode =true の場合、ノードID = Root.id、A.id、A2.id、A2.1.id

id_mode =falseの場合、ノード名=ルート、A、A2、A2.1

このパスを jsTree の右側に設定することは可能ですか?

はいの場合、このパスを設定する方法は? パスが既に存在する場合、コピーを防ぐ方法は? それ以外の場合は、選択したノードを右の jsTree にマージします。

-------------------------------------------------- ----------------------------------------------

.bind("select_node.jstree", function (event, data) を使用して、選択したノードでイベントを処理できます。+ * icon * のイベント onClick を処理するには?

左の jsTree に + アイコンのルート ノードが 1 つしか含まれていないことを考慮してから、+ アイコンで onClick イベントを処理する方法を教えてください。インクの答えを見る

選択したノードの子ノードを取得したい 子ノードのリストを選択したノードに追加する方法を教えてください。

[#2] と [#3] を jsTree 関数を使用して実現するには?

この問題に関するヘルプまたはガイダンスをいただければ幸いです。

4

1 に答える 1

0

jsTree の実装はわかりませんが、XML は必要ないと思います。サブツリーのルートに移動する再帰関数を作成し、存在しない場合に各ノードを追加して戻ってくることができます。擬似コード:

function transport(node, tree)
{
    var parent = node.getParent();
    var transported_node = null;

    if(parent != null)
        parent = transport(parent, tree);
    else
       parent = tree;

    transported_node = parent.getChild(node);

    if(transported_node == null)
       transported_node = parent.AddChild(node);

    return transported_node;
}
于 2012-05-08T19:18:34.593 に答える