2008-10-23 29 views
7

He visto this question volviendo a 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 js genérica 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 "controlador" dentro de mi JavaScript, debe ser de alguna manera accesible.Uso de JavaScript dentro de una etiqueta JSP

La pregunta es ... ¿Es correcto escribir en línea < etiquetas de script > junto con mi HTML para la creación de instancias y la inicialización (personalmente no creo que sea muy elegante)? Y acerca de ser accesible para el mundo de JS, ¿debería dejar una referencia global de mi objeto controlador (no tan elegante como creo), hay mejores formas de hacerlo?

Respuesta

9

Debe esforzarse por javascript en sus propios archivos. Esto generalmente se hace con Progressive Enhancement. Pero algunas veces no puede elegir, por ejemplo, cuando el mismo JSP procesa páginas en diferentes idiomas. He aquí un ejemplo 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 central está separada en su propio archivo js.

0

Aunque estoy de acuerdo en que no es del todo elegante, se me conoce que lo hago algunas veces cuando se combinan las decisiones del lado del servidor con un entorno integrado en AJAX. Hacer eco de < script en línea > etiquetas para inicializar algunas variables no es algo terrible, siempre y cuando nadie lo vea.

En cuanto a mejores métodos, no los conozco. Lo he hecho tan raramente que no he buscado una solución más elegante o "adecuada".

1

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

Esto hace que la depuración sea fácil, ya que la lógica está en los archivos externos (y Firebug parece tener problemas con la depuración del código de JavaScript en línea). Las bibliotecas se almacenan en caché, pero los datos que las crean no (lo que es el comportamiento deseado).

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

Creo que el factor decisivo es la cantidad de datos dinámicos que tiene. Si necesita representar estructuras de datos de gran tamaño, lo publicaría a través de una llamada AJAX que devuelve JSON. Si es una simple llamada a un constructor, póngalo en el JSP.

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

0

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

Cuestiones relacionadas