2012-10-23 63 views
7

私のjstreeには、すべての親ノードであるルートノードがあります。私はdndプラグインを使用しています。ツリーのどこにでもドラッグ&ドロップを許可したいのですが、ルートの内側、つまりルートの前後ではできません。jstreeドラッグアンドドロップでルートの前後にノードを制限する

- [Root] 
    - Node 1 
     - Node 1.1 
     - Node 1.2 
    + Node 2 
    - Node 3 
     + Node 3.1 

は、フォーラムで確認した後、私はdrag_checkイベントだけではなく、ツリー内の任意のノードのために外国のノードのためであることがわかりました。同じツリーノードを検証するには、crrm -> check_moveイベントを使用する必要があります。それが私の助けが必要な場所です。 [Root]の前後にノードがドロップされた場合は、falseを返すようにします。ここで

を開始するためのフィドルある - http://jsfiddle.net/juyMR/23/

答えて

3

あなたは、あなただけtrueを返すためにelse文を非常に近い必要がある。これは、任意の追加機能なしで、箱から出して取り扱うことができ

http://jsfiddle.net/blowsie/juyMR/59/

"crrm" : { 
     "move" : { 
      "check_move" : function (data) { 
       // alert(data.r.attr("id")); 
       if(data.r.attr("id") == "999") { 
        return false; 
       } 
       else { 
        return true; 
       } 
      } 
     } 
    }, 
1

data.o(ソースノード)を見て、data.np(ノードの親)とCRRMのcheck_moveにそのIDを点検。バイブルの例を見ると、data.np.attr( "id")が "jsTreeDiv"に等しくないようにしてください。

1

$("#tree").jstree({ 
    "types" : {  
     "valid_children" : [ "root" ], //<== THIS IS THE IMPORTANT ONE ! 
        "types" : { 
           "default" : { 
            "valid_children" : "none" 
           }, 
           "root" : { 
            "valid_children" : "default" 
           } 
           } 
       } 
}); 

"valid_children"は各ノードタイプの中で言えますが、1つ上のレベルです(上記のコードで "これは重要なものです" 。

これはグローバルにノードタイプのROOTに子があることを許可します。つまり、ルートからルートツリーのどこにでも移動することはできません。 jstreeの現在のバージョン(3.0.1)では

+1

これを使用して私のルースカスタムアイコンなどを作った。私は実際に型として使用しない型 '' '' 'に対して' 'valid_children ':[" root "]'を使用しました。すべてが機能します。 –

7

より簡単な解決策はありますが、2つの定義済みの型があるタイプのプラグインを使用している場合は、あなたが使用する必要があり、すべてが

"types" : {  
     "#" : { 
      "max_children" : 1 
     } 
    }, 

です。 1つは上記の "#"です。これは、ツリーの "実際の"ルート要素、つまり内部的に使用されているルート要素に自動的に使用されます。したがって、特別な設定をせずに最初のノードとして独自のルートを追加する場合は、すべてうまく動作します。

関連する問題