2011-08-19 6 views
1

J'ai un onglet-conteneur Dojo et lorsque je clique sur certains boutons, un nouvel onglet est ajouté dynamiquement avec son contenu téléchargé via Ajax. Les onglets contiennent des éléments de formulaire dynamiques qui sont analysés et chargés par Dojo. J'inclus également des blocs Javascript spécifiques à chaque onglet et ceux-ci sont également téléchargés via Ajax ... mais aucun des blocs Javascript ne s'exécute!Les événements Dojo ne se déclenchent pas

Exemple de contenu de l'onglet:

<input id="test" name="test" type="text" dojoType="dijit.form.ValidationTextBox" /> 

<script type="text/javascript"> 
    dojo.connect(dijit.byId('test'), 'onClick', function(evt){ 
     alert('testing 123'); 
    }); 
</script> 

Cependant, si je fais plutôt les événements qui déclenchent très bien:

<input id="test" name="test" type="text" dojoType="dijit.form.ValidationTextBox"> 
    <script type="dojo/method" event='onClick'> 
     alert('testing 123'); 
    </script> 
</input> 

Ma question est, pourquoi ne bloque pas javascript dans le premier exemple travail? est-ce une limitation Dojo? En outre, j'essaye également de placer des propriétés et des valeurs pour les widgets APRES qu'ils ont été chargés. Comment puis-je activer cela donné que je dois utiliser quelque chose comme dojo.addOnLoad() qui ne fonctionnera pas parce qu'il nécessite un bloc Javascript et que cela ne fonctionne pas comme dans le premier exemple ... Il n'y a pas d'événement onLoad de widget équivalent Je ne peux pas utiliser la seconde méthode non plus ... Des idées pour y arriver?

Répondre

2

Le « contenu de l'onglet » est en fait un élément de volet de contenu . Vous ne pouvez pas appeler un javascript dans un volet de contenu, sauf si vous utilisez <script type="dojo/method">. Au moins c'est ce que je sais.

Mise à jour: ifyou'll utiliser dojox.layout.ContentPane au lieu des dijit.layout.ContentPane tous les problèmes concernant les js à l'intérieur elle va disparaître. From Dojo Reference Guide:

dojox.layout.ContenPane est une extension de dijit.layout.ContentPane fournissant, entre autres, l'exécution de scripts.

0

Il semble que vous ayez besoin d'utiliser dojo.hitch pour que votre fonction soit dans sa portée lorsqu'elle est appelée. Essayez d'utiliser:

dojo.connect(dijit.byId('test'), 'onCLick', dojo.hitch(this, function(evt) { 
     alert('testing123'); 
})); 

Vous pouvez en lire davantage ici: http://dojotoolkit.org/reference-guide/dojo/hitch.html#dojo-hitch

+0

Non, cela ne fonctionne pas. L'alerte ne s'affiche jamais. – Ayyoudy

0

Vous devez vous assurer que le widget a été analysé en premier. Faites comme si:

dojo.addOnLoad(function(){/*connect code*/}); 
Questions connexes