Pregunta

He visto esta pregunta sobre la importación de archivos js relacionados con El contenido de la etiqueta en sí. Tengo un problema similar, aquí tengo una etiqueta jsp que genera algo de HTML y tiene una implementación genérica js que maneja el comportamiento de este HTML. Además, necesito escribir algunas declaraciones de inicialización, para poder usarlas luego a través de JavaScript. Para poder utilizar este & Quot; handler & Quot; dentro de mi JavaScript, debería ser accesible de alguna manera.

La pregunta es ... ¿Está bien escribir en línea < script > etiquetas junto con mi HTML para propósitos de instanciación e inicialización (personalmente no creo que sea muy elegante)? Y sobre ser accesible para el mundo JS, ¿debería dejar una variable global que haga referencia a mi objeto controlador (no es muy elegante, creo), ¿hay mejores maneras de hacerlo?

¿Fue útil?

Solución

Debe esforzarse por javascript en sus propios archivos. Esto generalmente se hace con Mejora progresiva . Pero algunas veces no tiene otra opción, por ejemplo, cuando el mismo JSP representa páginas en diferentes idiomas. Aquí hay un ejemplo de la vida real:

El 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>  

El 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);

En este ejemplo, el único javascript en el archivo JSP es la parte que debe estar allí. La funcionalidad principal está separada en su propio archivo js.

Otros consejos

No estoy completamente seguro de lo que está preguntando aquí, pero no hay nada de malo en incluir <script> etiquetas en el JSP para crear instancias de código javascript. A menudo sigo este modelo, escribo el código de la biblioteca en archivos javascript externos y luego llamo a los constructores a mis objetos desde las etiquetas <=>.

Esto facilita la depuración, ya que la lógica está en los archivos externos (y firebug parece tener problemas para depurar el código JavaScript en línea). Las bibliotecas se almacenan en caché, pero los datos que las instancian no (que es el comportamiento deseado).

La alternativa es tener el código de instanciación generado dinámicamente en un archivo javascript externo o llamada AJAX. También he hecho esto, con resultados positivos.

Creo que el factor decisivo es la cantidad de datos dinámicos que tiene. Si necesita representar grandes estructuras de datos, lo serviría a través de una llamada AJAX que devuelve JSON. Si es una simple llamada a un constructor, colóquelo en el JSP.

En cuanto a la variable global, a menudo tendré un global para el objeto de nivel superior que inicia todo. Dentro de eso, están todas las otras referencias a los objetos auxiliares.

Aunque estoy de acuerdo en que no es del todo elegante, se sabe que lo hago varias veces al combinar decisiones del lado del servidor con un entorno integrado AJAX. Haciendo eco en línea & Lt; script & Gt; etiquetas para inicializar algunas variables no es algo terrible, siempre y cuando nadie lo vea.

En cuanto a mejores métodos, no estoy al tanto de estos. Lo he hecho tan raramente que no he buscado una más elegante o & Quot; adecuada & Quot; solución.

Está bien usar etiquetas <script> en línea con HTML. Hay momentos en que se necesita, pero en cuanto a otras formas mejores, no lo sé. Sin hacer que las cosas parezcan más complicadas, es más fácil usar la etiqueta <=> que tratar de encontrar una manera de implementar archivos js.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top