2013-01-02 10 views
10

Sto usando il plug-in di dynatree per visualizzare un albero delle caselle di controllo, usando la modalità di selezione multipla (modalità 3).Dynatree ignora la proprietà select quando si usa ajax

Quando l'albero viene inizializzato utilizzando ajax (nessun caricamento lazy), sembra dimenticare che alcuni nodi vengono caricati inizialmente selezionati. Quando seleziono uno di questi nodi, il valore del flag passato nel gestore onSelect è vero, cioè: si pensa di voler selezionare il nodo.

Quando faccio nuovamente clic sulla casella deseleziona. Sembra che sullo sfondo la selezione non sia registrata finché non faccio fisicamente clic sulla casella di controllo. Voglio caricare l'albero con questo nodo già selezionato.

Il json che sto usando per caricare l'albero mi sta bene; la seleziona la proprietà vale per il nodo in questione, il nodo radice. Ecco un frammento del JSON:

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

UPDATE

sto caricando l'albero in questo modo:

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

dove dynaTreeInitUrl è l'url che restituisce il JSON.

Se hardcode il JSON in questo modo:

$("#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: "" 
    }   
}); 

funziona. :/

UPDATE:

ho scoperto il motivo per cui questo sta accadendo:

Si tratta di un bug in dynatree - o forse intenzione comportamento in cui si sta cercando di essere troppo intelligente.

Se il nodo figlio ha unselectable = true, il padre verrà deselezionato quando il figlio è caricato, anche se il genitore ha select = true. Ciò rende impossibile creare un albero in cui la selezione sia gerarchica, ad esempio in modo che, se viene selezionato un genitore, tutti i bambini siano selezionati automaticamente e non possano essere deselezionati. Suppongo che questo possa essere aggiunto a dynatree come un'altra "modalità".

+0

Sareste in grado di creare una pagina di prova? – Snuffleupagus

+0

Farò un tentativo, ma, il problema si verifica solo quando carico l'albero usando ajax - se uso la proprietà children per hardcode i dati di JSON funziona perfettamente. Non so come replicare la chiamata ajax in un jsFiddle o simile. – Kev

+0

jsfiddle ha un servizio di eco per testare ajax, la documentazione è [qui] (http://doc.jsfiddle.net/use/echo.html). Avrei creato la demo da solo, ma sono sicuro che riceverai più aiuto in generale con uno. – Snuffleupagus

risposta

1

ho scoperto il motivo per cui questo sta accadendo:

Si tratta di un bug in dynatree - o forse intenzione comportamento in cui si sta cercando di essere troppo intelligente.

Se il nodo figlio ha unselectable = true, il padre verrà deselezionato quando il figlio è caricato, anche se il genitore ha select = true. Ciò rende impossibile creare un albero in cui la selezione sia gerarchica, ad esempio in modo che, se viene selezionato un genitore, tutti i bambini siano selezionati automaticamente e non possano essere deselezionati. Suppongo che questo possa essere aggiunto a dynatree come un'altra "modalità".

Problemi correlati