2010-08-17 5 views
0

J'essaye de faire fonctionner JsTree pour obtenir une vue de dossier dans mon application MVC. Tout fonctionne bien si j'utilise la liste static html existante dans la page. Mais je dois obtenir la liste ul dynamiquement, donc je suis en train de l'appel ajax pour JsTree décrit dans la documentation:Ajax appel dans JsTree jQuery plugin dans MVC

<script type="text/javascript"> 
     var url; 
     $(document).ready(function() { 
      $("a").click(function() { 
       url = "?url=" + $(this).attr("rel"); 
       alert(encodeURI(url)); 
      }); 
     }); 

     $(function() { 

      $("#demo2").jstree({ 
       "html_data": { 
        "ajax": { 
         "url": "/Home/Directories/" 
        } 
       }, 
       "ui": { 
        "select_limit": 2, 
        "select_multiple_modifier": "alt", 
        "selected_parent_close": "select_parent", 
        "initially_select": ["phtml_2"] 
       }, 
       "themes": { 
        "theme": "classic", 
        "dots": true, 
        "icons": true 
       }, 
       "plugins": ["themes", "html_data", "ui"] 
      }); 
     }); 

    </script> 

Comme vous pouvez le voir, je suis en train d'avoir un événement click mis sur tous les « a » éléments pour cette liste. Encore une fois, cela fonctionne bien si la liste ul est écrite directement dans le div id = "demo2". Mais lorsque j'essaie d'obtenir la liste dynamiquement, l'événement click sur ces éléments créés dynamiquement ne fonctionne pas. Rien ne se passe. J'ai vérifié le résultat html, et tout va bien pour autant que je puisse voir. C'est comme si l'événement click n'était pas défini car les éléments dynamiques n'existaient pas lorsque l'événement click est défini, cela pourrait-il être le cas? Si oui, que puis-je faire à ce sujet? Je dois être capable de déclencher des événements sur les éléments créés dynamiquement ... J'ai regardé dans la documentation de JsTree, mais il est plutôt mince, il ne fait que lister les événements et ainsi de suite, ne montrant pas comment les utiliser. Je suppose que si je pouvais avoir un callback de sorte que l'événement click soit défini seulement après la création de l'arbre qui le ferait fonctionner, mais je n'arrive pas à comprendre comment écrire un callback pour cela. (Je suis très novice avec jquery et je me débrouille avec ce scénario, mais j'en ai besoin alors j'essaie d'apprendre au fur et à mesure).

Répondre

4

En fait, j'ai trouvé la réponse moi-même en luttant un peu plus avec la documentation! Je suspecte que les docs seront plus faciles à comprendre une fois que j'en connaîtrai un peu plus sur jQuery dans son ensemble ... De toute façon, si quelqu'un d'autre est intéressé, voici ce que je devais faire pour lier l'évènement créé:

$("#demo2") 
     .bind("loaded.jstree", function() { 
      $("a").click(function() { 
       url = "?url=" + $(this).attr("rel");      
       alert(encodeURI(url)); 
      }); 
     }).jstree(//...[the rest of the function the same as before]... 
Questions connexes