Tengo un extraño problema con JSTree y Ajax.JS Tree - select_node no funciona
genero mi árbol a través de una petición/PHP Ajax que genera HTML (UL, Li, etiquetas) usando ...
$.ajax({
url: 'ajaxTreeView.php?method=edit&partid='+partId,
cache: false,
success: function(tree)
{
$('#treeViewer').html(tree);
}});
y activar JStree en el código usando ...
options =
{
"core": { animation: 120 },
"themes": { theme: 'corral', dots: true },
"types":
{
"types":
{
"parent": { "icon": { "image": "images/custom/Legend/node_select.png" } },
"child": { "icon": { "image": "images/custom/Legend/node_select_child.png" } },
"current": { "icon": { "image": "images/custom/Legend/node.png" } }
}
},
"plugins": [ "html_data", "types", "themes", "ui", "contextmenu", "cookies" ],
"ui": { "select_limit" : 1 },
"cookies": { "save_selected" : false }
};
$("#tree").jstree(options);
Parece que no puedo obtener un nodo para seleccionar fácilmente. Intenté inicialmente_seleccionar, pero parece que no funciona y tampoco es ideal ya que a menudo quiero seleccionar el nodo programáticamente.
He intentado utilizar ...
$('#tree').jstree("select_node", '#ref565', true);
Esto funciona si llamo a la función a través de un hipervínculo, pero no funciona si lo llamo después initalise JStree.
Veo por la adición de una alerta (todo esto sucede en la rutina Ajax Éxito) ...
$('#treeViewer').html(tree);
$("#tree").jstree(options);
alert('test');
$('#tree').jstree("select_node", '#ref565', true);
... que el árbol no ha rendido ante la alerta se inicia.
he añadido un setTimeOut ...
$('#treeViewer').html(tree);
$("#tree").jstree(options);
setTimeout(function() {selectNode(565);},1250);
$('#tree').jstree("select_node", '#ref565', true);
... esto funciona.
claramente estoy siendo estúpido. ¿Estoy usando la sintaxis incorrecta? ¿Por qué tendría que establecer un retraso para seleccionar un nodo?
Por favor ayuda.
Esto es justo lo que quería pero no veo un montón de código que comienza con .bind después de algunas google. Estoy siendo tonto, ¿esto significa que debería escribir ... $ ('# tree'). Jstree.bind ("loaded.jstree", función (evento, datos) { $ ('# tree') .jstree ("select_node", "# ref565", true); }); Si es así, eso no funciona para mí. –
He actualizado mi ejemplo que muestra cómo vincularía un evento. Si algo no funciona debido a un error de codificación, use el depurador para resolverlo. –
Muchas gracias. Me resulta mucho más fácil comprender estos eventos ahora que me doy cuenta de que pueden estar predefinidos en la instanciación del árbol. Gran ejemplo, aplausos :) –