2010-02-19 3 views
0

Fondamentalement ce que je suis après, après écraser tout mon JavaScript dans un fichier (ou quelques fichiers) comment puis-je faire un document.observe (dom: loaded ({...})) appel de fonction pour la bonne page? Donc, disons que j'ai 5 pages dans mon site Web, et chacune a un fichier JS séparé. A l'intérieur de chaque fichier se trouve un chargement de fonctions liées à la page, et une fonction spéciale qui configure les gestionnaires d'événements, etc., lorsque le DOM est chargé. Évidemment si toutes les 5 pages incluent leurs propres dossiers de JS alors c'est bien. Mais je veux compacter tous mes JS en une seule page pour des raisons de version et d'efficacité. Par conséquent, ce faisant, je me retrouverais avec 5 fonctions "dom: loaded" en attente d'installation. Cela ne fonctionnera pas car le contenu de ces fonctions est spécifique à la page. Donc, ma question est comment puis-je faire ce que je veux faire sans provoquer un tas d'erreurs DOM, et de fausses demandes de configuration eventhandler? J'ai considéré les espaces de noms et d'autres choses comme ça, mais je ne sais pas vraiment quoi que ce soit à ce sujet.Comment puis-je avoir plusieurs fonctions document.observe (dom: loaded ...) dans un fichier javascript? (prototype)

Btw, j'utilise le prototype de lib. Oh, et mes sites sont considérablement plus grands que 5 pages! :)

Merci, Lee

Répondre

1

Quelques idées: inspectent le Royaume pour identifier la page. Par exemple, attachez un attribut à l'élément body. placez une balise de script dans la page qui définit une variable. inspecter l'URL.

Lorsque l'événement de chargement se déclenche, le gestionnaire d'événements identifie la page et passe le contrôle au bon code.

+0

Merci d'avoir pris le temps de répondre. J'avais un peu considéré ces idées, mais je les avais considérées comme un peu "hacky". Je suppose que je suis juste trop difficile. Je vais leur donner un coup de pouce. Merci –

1

Je donnerais différents identifiants aux <body> s des fichiers HTML séparés et testerai dans l'événement dom: loaded le nom de l'élément <body> en utilisant $$('body')[0].id.

+0

Merci beaucoup. Je vais essayer avec les suggestions de Chris ci-dessus. –

+0

@LeeRM: de rien. –

0

J'ai choisi d'utiliser une expression rationnelle php pour capturer l'URI, puis l'utiliser comme ID de corps. Sur mes sites, où les noms de pages sont statiques, cela signifie que chaque page aura un identifiant unique.

Ensuite, j'ajoute un fichier JS dans la HEAD qui contient un bloc de commutation à l'intérieur duquel le ou les codes appropriés sont chargés. Le bloc de commutation se trouve dans la fonction document.observe (dom: loaded ...).

Fonctionne un régal!

Merci encore pour votre aide.

0

Je tends toujours écrire mes .js sans auto activation (autant que possible) ...

psuedo code

namespace('mysite.section.init'); 
mysite.section.init.pageName = function(){ 
    //stuff to run here... 
};

dans votre page d'accueil, en bas, ou via dom: événement chargé simplement exécuté mysite.section.init.pageName();

Questions connexes