2

私は 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

1

[+]クリックイベントのお手伝いをさせていただきます。jquery.jstree.js(非圧縮バージョン)を変更する必要があります。それを開き、文字列を見つけてtoggle_node : function (obj)(タブ記号があるので検索しますtoggle_node)、ここに1行追加します。編集後は次のようにする必要があります。

        toggle_node : function (obj) {
            obj = this._get_node(obj);
            this.__callback(obj); // these line must be added
            if(obj.hasClass("jstree-closed")) { return this.open_node(obj); }
            if(obj.hasClass("jstree-open")) { return this.close_node(obj);}             
        },

toggle_nodeこれで、通常どおりイベントのコールバックをバインドできます。次に例を示します。

    $("#your_jstree").bind("toggle_node.jstree", function (e, data) {
        is_opened = $(data.rslt).hasClass('jstree-open') ? false : true;
        node_id = $(data.rslt).attr('id');
        alert('node with id='+node_id+' is '+(is_opened ? 'opening' : 'closing')+' now.');          
    })

これらのコールバックは、ノードが開いたり閉じたりする前に呼び出します。また、イベントを使用する場合のように、ツリーのロード中はこのイベントは発生しませんopen_node

于 2012-04-27T11:08:24.603 に答える