Question

J'ai vu cette question régir l'importation de fichiers js liés à le contenu du tag lui-même. J'ai un problème similaire. J'ai ici une balise jsp qui génère du HTML et une implémentation générique de JS qui gère le comportement de ce HTML. De plus, j'ai besoin d'écrire des instructions d'initialisation pour pouvoir ensuite les utiliser avec JavaScript. Pour pouvoir utiliser ce & Quot; handler & Quot; dans mon code JavaScript, il devrait être accessible.

La question est ... Est-il correct d'écrire en ligne < script > balises avec mon HTML à des fins d'instanciation et d'initialisation (personnellement, je ne pense pas que ce soit très élégant)? Et pour être accessible au monde JS, devrais-je laisser une variable globale référençant mon objet de gestionnaire (pas très élégant aussi, je pense), existe-t-il de meilleures façons de le faire?

Était-ce utile?

La solution

Vous devez rechercher JavaScript dans ses propres fichiers. Cette opération est généralement effectuée à l'aide de la amélioration progressive . Mais parfois, vous n'avez pas le choix, par exemple lorsque le même JSP rend des pages dans différentes langues. Voici un exemple concret:

Le JSP:

  <script src="/javascript/article_admin.js"></script>  
  <script type="text/javascript">  
      NP_ArticleAdmin.initialize({  
            text: {  
              please_confirm_deletion_of: '<i18n:output text="please.confirm.deletion.of"/>',  
              this_cannot_be_undone: '<i18n:output text="this.cannot.be.undone"/>'  
            }  
      });  
  </script>  

Le javascript (article_admin.js):

 /*global NP_ArticleAdmin, jQuery, confirm */  
 NP_ArticleAdmin = function ($) {  
     var text;  

     function delete_article(event) {  
         var article = $(this).parents("li.article"),  
         id = article.attr("id"),  
         name = article.find("h3.name").html();  
         if (confirm(text.please_confirm_deletion_of + name + text.this_cannot_be_undone)) {  
             $.post("/admin/delete_article", {id: id});  
             article.fadeOut();  
         }  
         event.preventDefault();  
         return false;  
     }  

     function initialize(data) {  
         text = data.text;  
         $("#articles a.delete").click(delete_article);  
     }  

     return {initialize: initialize};  
 }(jQuery);

Dans cet exemple, le seul javascript du fichier JSP est la partie qui doit s'y trouver. La fonctionnalité principale est séparée dans son propre fichier js.

Autres conseils

Je ne suis pas tout à fait sûr de ce que vous demandez ici, mais je n'ai rien à reprocher à inclure des balises <script> dans le fichier JSP pour instancier le code javascript. Je suis souvent ce modèle, écrivant le code de bibliothèque dans des fichiers JavaScript externes, puis appelant les constructeurs à mes objets à partir des <=> balises.

Cela facilite le débogage, car la logique est dans les fichiers externes (et firebug semble avoir des problèmes avec le débogage du code javascript en ligne). Les bibliothèques sont mises en cache, mais pas les données qui les instancient (ce qui est le comportement souhaité).

L’alternative consiste à générer dynamiquement le code d’instanciation dans un fichier javascript externe ou un appel AJAX. J'ai fait cela aussi, avec des résultats positifs.

Je pense que le facteur déterminant est la quantité de données dynamiques que vous avez. Si vous avez besoin de représenter de grandes structures de données, je le servirais via un appel AJAX qui renvoie JSON. S'il s'agit d'un simple appel à un constructeur, mettez-le dans le fichier JSP.

En ce qui concerne la variable globale, j’aurai souvent un objet global pour l’objet de niveau supérieur qui déclenchera tout. À l'intérieur, toutes les autres références aux objets d'assistance.

Bien que je convienne que ce n’est pas tout à fait élégant, j’ai été réputé le faire plusieurs fois lorsque je combinais des décisions côté serveur avec un environnement intégré à AJAX. En écho à la ligne & Lt; script & Gt; balises pour initialiser certaines variables n’est pas une chose terrible, tant que personne ne la voit.

En ce qui concerne les meilleures méthodes, je ne les connais pas. Je l'ai fait si rarement que je n'ai pas cherché de style plus élégant ou & "Correct &"; solution.

L’utilisation de balises <script> en ligne avec HTML est acceptable. Il y a des moments où cela est nécessaire, mais je ne connais pas de meilleures solutions. Sans compliquer les choses, il est plus facile d'utiliser la balise <=> que d'essayer de trouver un moyen d'implémenter les fichiers js.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top