2012-03-12 13 views
5

Ho jsTree che carica i dati da una pagina JSON e viene visualizzato correttamente. Sto provando a selezionare il nodo principale per impostazione predefinita ma non riesco a farlo funzionare.Impossibile ottenere il plug-in jQuery jsTree per selezionare inizialmente un nodo

Ecco il mio jQuery:

$(function() { 
    $("#demo1").jstree({ 
     "plugins" : [ "themes","json_data","ui" ], 
     "json_data" : { 
      "ajax" : { 
       "url" : "categorytreejson.asp" 
      }, 
      "ui" : { 
       "initially_select" : [ "root" ] 
      }, 
     } 
    }); 
}); 

Ecco il mio JSON da categorytreejson.asp che convalida utilizzando JSONLint:

{ 
    "data": "root", 
    "attr": { 
    "id": "root" 
    }, 
    "children": [ 
    { 
     "data": "Photography", 
     "attr": { 
     "id": "Photography" 
     }, 
     "children": [ 
     { 
      "data": "Lenses", 
      "attr": { 
      "id": "Lenses" 
      }, 
      "children": [ 
      { 
       "data": "Telephoto", 
       "attr": { 
       "id": "Telephoto" 
       } 
      }, 
      { 
       "data": "Macro", 
       "attr": { 
       "id": "Macro" 
       } 
      }, 
      { 
       "data": "Other", 
       "attr": { 
       "id": "Other" 
       } 
      } 
      ] 
     } 
     ] 
    } 
    ] 
} 

Ecco il codice HTML risultante:

<li class="jstree-last jstree-open" id="root"><ins class="jstree-icon">&nbsp;</ins><a class="" href="#"><ins class="jstree-icon">&nbsp;</ins>root</a> 
    <ul style=""> 
     <li class="jstree-closed" id="Photography"><ins class="jstree-icon">&nbsp;</ins><a class="" href="#"><ins class="jstree-icon">&nbsp;</ins>Photography</a> 
      <ul> 
       <li class="jstree-last jstree-closed" id="Lenses"><ins class="jstree-icon">&nbsp;</ins><a href="#"><ins class="jstree-icon">&nbsp;</ins>Lenses</a> 
        <ul> 
         <li class="jstree-leaf" id="Telephoto"><ins class="jstree-icon">&nbsp;</ins><a href="#"><ins class="jstree-icon">&nbsp;</ins>Telephoto</a> 
         </li> 
         <li class="jstree-leaf" id="Macro"><ins class="jstree-icon">&nbsp;</ins><a href="#"><ins class="jstree-icon">&nbsp;</ins>Macro</a> 
         </li> 
         <li class="jstree-last jstree-leaf" id="Other"><ins class="jstree-icon">&nbsp;</ins><a href="#"><ins class="jstree-icon">&nbsp;</ins>Other</a> 
         </li> 
        </ul> 
       </li> 
      </ul> 
     </li> 
</li> 
</ul> 
</li> 
</ul> 
</li> 

E l'oggetto dati risultanti visto da Firebug:

args: [] 
inst: Object { data={...}, get_settings=function(), _get_settings=function(), more...} 
rlbk: false 
rslt: undefined 

sto assumendo la maggior parte del problema è dovuto al fatto di risultati è vuoto, ma non sono sicuro perché?

risposta

4

Si sta inserendo la configurazione del plugin UI all'interno di la configurazione del plugin json_data.
È necessario estrarlo e funzionerà.

"json_data" : { 
     "ajax" : { 
      "url" : "categorytreejson.asp" 
     } 
    }, 
    "ui" : { 
     "initially_select" : [ "root" ] 
    } 
+1

Hai ragione. Sono felice di avere un altro paio di occhi. Grazie mille. Non riesco ancora a capire perché non abbia un oggetto rslt. – Chris

0

risposta @Zheileman è molto migliore del mio, ma ho pensato che sarebbe stato interessante per condividere un altro modo per risolvere questo:

sul documento pronto ho fatto questo con l'uso degli eventi jstree:

var i = 0; 
      $.each($("#container").jstree()._model.data, function (value, index) { 
       if (i == 1) { 
        $("#container").jstree(true).select_node(value, false, false); 
        $("#container").jstree(true).open_node(value); 
        return false; 
       } 
       i++; 
      }) 
1

In funzione bind del jstree aggiungere la seguente riga per selezionare l'ultimo nodo, quando l'albero è loaded-

$('#tree_id').jstree('select_node', 'ul > li:last'); 

Per selezionare primo nodo sempre, uso-

$('#tree_id').jstree('select_node', 'ul > li:first'); 

Esempio-

$('#tree_id').bind("loaded.jstree", function(e, data) { 
    $(this).jstree("open_all"); 
    $('#tree_id').jstree('select_node', 'ul > li:last'); 
}) 
Problemi correlati