2013-01-02 15 views
10

Używam wtyczki dynatree, aby wyświetlić drzewo wyboru, używając trybu wielokrotnego wyboru (tryb 3).Dynatree ignoruje właściwość select przy użyciu ajax

Gdy drzewo jest inicjalizowane za pomocą ajax (bez leniwego ładowania), wydaje się, że zapomniałeś, że niektóre węzły są załadowane początkowo wybrane. Kiedy wybiorę jeden z tych węzłów, wartość flagi przekazanej do programu obsługi onSelect jest prawdziwa, tj .: uważa, że ​​chcę wybrać węzeł.

Po ponownym kliknięciu tego pola wyboru zostanie odznaczone. Wygląda na to, że w tle wybór nie jest rejestrowany, dopóki fizycznie nie kliknę pola wyboru. Chcę załadować drzewo tym węzłem: już wybrane.

Json, którego używam do załadowania drzewa, wygląda dla mnie dobrze; Właściwość wybierz true dla danego węzła, węzła głównego. Oto urywek JSON:

{ 
"expand":true, 
"title":"All", 
"isFolder":false, 
"key":"0", 
"isLazy":false, 
"addClass":null, 
"select":true, 
"unselectable":false, 
"children": [... omitted for clarity] 
} 

UPDATE

wczytuję drzewa w ten sposób:

$("#locationsTree").dynatree({ 
    checkbox: true, 
    selectMode: 3, 
    initAjax: { 
     type: "POST", 
     url: dynaTreeInitUrl 
    }, 
    classNames: 
    { 
     nodeIcon: "" 
    }   
}); 

gdzie dynaTreeInitUrl to adres, który zwraca JSON.

Gdybym hardcode JSON tak:

$("#locationsTree").dynatree({ 
    checkbox: true, 
    selectMode: 3, 
    children: { 
     "expand":true, 
     "title":"All", 
     "isFolder":false, 
     "key":"0", 
     "isLazy":false, 
     "addClass":null, 
     "select":true, 
     "unselectable":false, 
     "children": [{ 
      "expand": true, 
      "title": "Child", 
      "isFolder": false, 
      "key": "1", 
      "isLazy": false, 
      "addClass": null, 
      "select": true, 
      "unselectable": true, 
      "children": [] 
     }] 
    }, 
    classNames: 
    { 
     nodeIcon: "" 
    }   
}); 

to działa. :/

UPDATE:

odkryłem, dlaczego tak się dzieje:

Jest to błąd w dynatree - czy może zamierzone zachowanie, gdzie stara się być zbyt mądry.

Jeśli węzeł podrzędny ma nieobowiązany = true, rodzic zostanie wyłączony, gdy dziecko zostanie załadowane, nawet jeśli rodzic ma opcję select = true. W ten sposób niemożliwe jest utworzenie drzewa, w którym wybór jest hierarchiczny - tzn .: tak, aby w przypadku wybrania elementu nadrzędnego wszystkie dzieci zostały wybrane automatycznie i nie można ich odznaczyć. Przypuszczam, że można to dodać do dynatree jako kolejny "tryb".

+0

będzie można założyć stronę demonstracyjną? – Snuffleupagus

+0

Spróbuję, ale problem występuje tylko wtedy, gdy ładuję drzewo za pomocą ajax - jeśli użyję właściwości children do zakodowania danych json, to działa idealnie. Nie wiem, jak skopiować wywołanie ajax w jsFiddle lub podobnym. – Kev

+0

jsfiddle ma usługę echo do testowania ajax, dokumentacja jest [tutaj] (http://doc.jsfiddle.net/use/echo.html). Sam przygotowałem demo, ale jestem pewien, że uzyskasz ogólniejszą pomoc przy jednym. – Snuffleupagus

Odpowiedz

1

odkryłem, dlaczego tak się dzieje:

Jest to błąd w dynatree - czy może zamierzone zachowanie, gdzie stara się być zbyt mądry.

Jeśli węzeł podrzędny ma nieobowiązany = true, rodzic zostanie wyłączony, gdy dziecko zostanie załadowane, nawet jeśli rodzic ma opcję select = true. W ten sposób niemożliwe jest utworzenie drzewa, w którym wybór jest hierarchiczny - tzn .: tak, aby w przypadku wybrania elementu nadrzędnego wszystkie dzieci zostały wybrane automatycznie i nie można ich odznaczyć. Przypuszczam, że można to dodać do dynatree jako kolejny "tryb".

Powiązane problemy