2012-03-12 22 views
5

Tengo jsTree cargando datos desde una página JSON y se muestra correctamente. Estoy intentando seleccionar el nodo raíz de forma predeterminada pero no puedo hacer que funcione.No se puede obtener el complemento jQuery jsTree para seleccionar inicialmente un nodo

Aquí es mi jQuery:

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

Aquí está mi JSON de categorytreejson.asp que valida el uso de 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" 
       } 
      } 
      ] 
     } 
     ] 
    } 
    ] 
} 

Aquí está el código HTML resultante:

<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> 

Y el objeto de datos resultante visto por Firebug:

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

Estoy asumiendo la mayor parte del problema se debe a que de resultados está vacío, pero no estoy seguro de por qué?

Respuesta

4

que están poniendo la configuración de la interfaz de usuario plug-in dentro la configuración del plugin json_data.
Debe sacarlo, y funcionará.

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

Tienes razón. Me alegro de tener otros ojos. Muchas gracias. Todavía no puedo entender por qué no tengo un objeto rslt sin embargo. – Chris

0

respuesta @Zheileman es mucho mejor que la mía, pero pensé que sería interesante compartir otra manera de resolver esto:

el documento listo Hice esto con el uso de los eventos 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

En función de enlace de jstree añadir la siguiente línea para seleccionar el último nodo cuando el árbol es loaded-

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

Para seleccionar primer nodo siempre, uso-

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

Ejemplo-

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