2009-08-21 4 views
0

J'ai des recherches sur un problème et je n'ai pas trouvé de solution par des techniques JavaScript normales (peut-être y en a-t-il mais je n'en ai trouvé aucun). Le problème est que mon application charge (insère) des fichiers JavaScript lorsque l'utilisateur charge une section du système. Le problème vient quand j'essaye de décharger (enlever) un.L'application ne parvient pas à _re_loader dynamiquement les fichiers JavaScript

J'ai remarqué que si je charge la section A (qui charge le script A '), puis chargez la section B (qui charge le script B'), puis chargez à nouveau la section A, le code du script A 'ne s'exécute pas encore une fois, donc chaque enregistrement d'événement là-bas ne se fait pas, ce que je veux faire. (Peut-être qu'un nettoyage supplémentaire est requis et que je ne suis pas au courant?)

Des idées? Si ce que je viens de dire a un sens ...

Un exemple:

1- L'utilisateur entre dans la section « Produits »

2- le fichier de l'interface utilisateur et JavaScript associé aux « produits » se charge

2.1- Products.js is now inserted in the <head> 

2.2- Products.js code gets parsed and executed 

3- l'utilisateur saisit «les clients de la Section

3.1 - Products.js reference is removed from the <head> 

4- les deux une interface utilisateur e fichier JavaScript associé au get 'clients chargé

4.1- Clients.js is now inserted in the <head> 

4.2- Clients.js code gets parsed and executed 

5- utilisateur entre dans la section 'Produits'

5.1 - Clients.js reference is removed from the <head> 

6- Les deux le fichier interface utilisateur et JavaScript associé aux 'produits' se chargés

6.1- Products.js is now inserted in the <head> 

6.2- Products.js code **DOES NOT** get parsed nor executed 

Merci d'avance.

P.S .: Aucun cadre n'est utilisé pour cette partie de l'application.

+0

Dans quel navigateur voyez-vous ce site? –

+0

Tous. Je ne pense pas que ce soit un problème de croisement. – leomdg

Répondre

1

Pas vraiment une réponse, mais vous pouvez vous fier à une méthode init() pour réellement travailler, plutôt que le corps du fichier javascript. Cela semble plus propre, en tout cas, comme ré-insérer du javascript pour provoquer l'exécution semble tout simplement bâclé.

+0

En fait, l'application est basée sur des paquets. Si elles, comme vous l'avez bien fait remarquer, incluent une méthode init(), elles s'appellent agissant en tant que constructeur pour l'objet représenté par ce paquet, ayant ainsi des classes dans un environnement sans classe. Si j'ai bien compris, vous suggérez que l'application exécute ce "constructeur" chaque fois qu'il "charge" un fichier, n'est-ce pas? – leomdg

+0

Oui.J'ai vu des navigateurs "charger" js quand vous "insérez" des tags de script "dynamiquement", bien que si cela échoue, faire une sorte de "constructeur", sur lequel "vous" compter de toute façon, semble sensé. –

+0

Une somme de cette solution et celle choisie ici comme réponse préférée: http://stackoverflow.com/questions/1704876/re-executing-javascript-files semble avoir résolu le problème. – leomdg

0

YUI fournit une classe spéciale pour charger dynamiquement non seulement leurs bibliothèques à partir de javascript, mais aussi celles de vos propres utilisateurs.

Voici le lien YUI LOADER

Tant que vous ne faites pas usage de leur gestionnaire d'histoire (que je doute que vous), cela devrait vous permettre de charger et recharger les fichiers javascript à la volée.

+0

Merci Dr. Zoidberg, je veux dire, Zoidberg, heh .. Je connais les outils de YUI et en fait je pense qu'ils ont le meilleur cadre et divers outils en existence. Mais, comme je l'ai indiqué dans le post-scriptum (PS), cette partie de l'application n'utilise aucun cadre et je n'ai pas l'intention de le faire, mais votre réponse est toujours valide, car si je l'utilisais, j'irais YUI Loader;). – leomdg