2012-10-23 16 views
7

W moim jstree mam węzeł główny, który jest węzłem nadrzędnym wszystkich. Użyłem wtyczki dnd. Chcę zezwolić na przeciąganie i upuszczanie w dowolnym miejscu drzewa, ale tylko wewnątrz korzenia, tj. Przed lub po źródle głównym.jstree węzeł ograniczający przeciąganie i upuszczanie przed i po root

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

Po sprawdzeniu z forów znalazłem że drag_check wydarzenie jest dla zagranicznych węzłów, a nie tylko dla każdego węzła w drzewie. Aby sprawdzić poprawność tego samego węzła drzewa, należy użyć zdarzenia crrm -> check_move. Tam potrzebuję pomocy. Chcę zwrócić wartość false, jeśli węzeł został upuszczony przed lub po [Root].

Oto skrzypce zacząć - http://jsfiddle.net/juyMR/23/

Odpowiedz

3

jesteś bardzo blisko, wystarczy oświadczenie innego, aby powrócić prawda

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

Spójrz na data.o (węzła źródłowego) i data.np (węzeł nadrzędny) i sprawdzić swoje identyfikatory w check_move crrm. Patrząc na przykład skrzypiec, nie pozwól, aby data.np.attr ("id") była równa "jsTreeDiv".

1

To mogą być obsługiwane po wyjęciu z pudełka, bez dodatkowych funkcji:

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

Możesz wspomnieć o "valid_children" w każdym z typów twoich węzłów, ale także o jeden poziom wyżej (sprawdź w powyższym kodzie, gdzie jest napisane "TO JEST WAŻNE JEDEN") .

Spowoduje to, że Twój ROOT typu węzeł będzie miał globalne potomstwo, co oznacza, że ​​nie możesz przenieść niczego poza katalog główny, ale wszędzie wewnątrz drzewa głównego.

+1

za pomocą tego "jak jest" mnie luźne niestandardowe ikony..etc. ale użyłem '" valid_children ": [" root "]' for type '" # "', którego faktycznie nie używam jako typu. Wszystko działa poprawnie. –

7

W obecnej wersji jstree (3.0.1) jest bardziej proste rozwiązanie, wszystko trzeba użyć jest

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

Jeśli używasz wtyczki typu istnieją dwa typy predefiniowane. Jednym z nich jest "#" użyte powyżej. Jest to automatycznie używane dla "prawdziwego" elementu głównego drzewa, co oznacza ten, który jest używany wewnętrznie. Więc jeśli dodajesz własny root jako pierwszy węzeł bez dodatkowej konfiguracji, wszystko będzie działać poprawnie.

Powiązane problemy