2011-06-23 14 views
6

Tengo un botón que se recarga (reenvía una solicitud AJAX) una vez que se hace clic en jsTree.¿Cómo puedo vincular una función de devolución de llamada en el evento completo de actualización jstree?

Aquí es un código de configuración de ejemplo que tengo:

treeContainer.bind("loaded.jstree", function() { 
    alert("the tree is loaded"); 
}).jstree(config); 

El problema que experimento es que no tengo la alerta (envuelto en una función de devolución de llamada) muestra una vez el botón 'recarga' se hace clic en el segundo , 3 °, etc. veces. ¿Estoy utilizando el evento de estado jstree incorrecto?

Para resumir, quiero que se ejecute una función de devolución de llamada jsTree cada vez que hago clic en el botón 'recargar'.

Actualmente estoy usando jsTree 1.0-rc1 (rev. 191).

Respuesta

-1

Desde el jstree documentation:

.loaded()

Una función maniquí, cuyo propósito es sólo para activar el evento cargado. Este evento se desencadena una vez que se cargan los nodos raíz del árbol , pero antes de que se abran los nodos configurados inicialmente en abierto .

Así que puede llamar a este método desde la devolución exitosa de su llamada ajax. Algo como esto:

$.ajax({ 
    url: "yourscript-url", 
    success: function(){ 
    $('selector-for-jstree-container').jstree('loaded'); 
    } 
}); 

Véase también la "Interactuar con el árbol" en la misma página de documentación jstree.

+0

esto no es todo lo que necesitaba ... Quiero mantener mis configuraciones relacionadas con jsTree en un solo lugar. Lo que estoy buscando es un evento como este: 'treeContainer.bind (" reloaded.jstree ", function() {...}). jstree (...)' –

+0

@John Doe Lo siento pero No creo que haya un evento como este en jstree. Tendrás que trabajar en eso (como sugerí) o extender el núcleo jstree e implementar este nuevo evento. –

1

Esto, unido al núcleo:

 reopen : function() { 
      var _this = this; 
      if(this.data.core.to_open.length) { 
       $.each(this.data.core.to_open, function (i, val) { 
        _this.open_node(val, false, true); 
       }); 
      } 
      this.__callback({}); 
      this.reopened(); 
     }, 

nota de que sólo se añade a la this.reopened método reabrir allready existente. Ahora crea el método abierto de nuevo:

 reopened : function() { 
      this.__callback(); 
     }, 

ahora se unen al nuevo método abierto de nuevo a su árbol selector

}).bind("reopened.jstree", function (e,data) { 
     alert("i am refreshed..."); 
    }); 

Atención, porque este mensaje de alerta también se llama cuando se hace el árbol cargando. ¡De todos modos es mejor, ya que ahora tiene una forma de tener una devolución de llamada cuando el árbol se actualiza!

Espero que esto les ayude a todos!

5

Destruir el árbol antes de construir el nuevo funciona también.

treeContainer.jstree("destroy"); 
treeContainer.bind("loaded.jstree", function() { 
    alert("the tree is loaded"); 
}).jstree(config); 
+0

Gracias. La simplicidad de esto y el hecho de que era el único método que podía poner en práctica me hacen muy feliz. – user1167442

Cuestiones relacionadas