Domanda

ho visto questa domanda riguardante l'importazione di file js relativi al contenuto del tag stesso.Ho un problema simile, qui ho un tag jsp che genera del codice HTML e ha un'implementazione js generica che gestisce il comportamento di questo HTML.Inoltre devo scrivere alcune istruzioni di inizializzazione, in modo da poterle utilizzare successivamente tramite JavaScript.Per poter utilizzare questo "gestore" all'interno del mio JavaScript, dovrebbe essere in qualche modo accessibile.

La domanda è...Va bene scrivere tag <script> in linea insieme al mio HTML per scopi di istanziazione e inizializzazione (personalmente non penso che sia molto elegante)?E per quanto riguarda l'accessibilità al mondo JS, dovrei lasciare una var globale che faccia riferimento al mio oggetto gestore (non molto elegante, credo), ci sono modi migliori per farlo?

È stato utile?

Soluzione

Dovresti cercare javascript nei suoi file. Questo di solito viene fatto con Progressive Enhancement . Ma a volte non hai scelta, ad esempio quando lo stesso JSP esegue il rendering di pagine in lingue diverse. Ecco un esempio di vita reale:

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

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

In questo esempio, l'unico javascript nel file JSP è la parte che deve essere lì. La funzionalità principale è separata nel suo file js.

Altri suggerimenti

Non sono del tutto sicuro di ciò che stai chiedendo qui, ma non c'è nulla di sbagliato nell'includere <script> tag nel JSP per creare un'istanza del codice javascript. Seguo spesso questo modello, scrivendo il codice della libreria in file javascript esterni e quindi chiamando i costruttori ai miei oggetti dai <=> tag.

Ciò semplifica il debug, poiché la logica è tutta nei file esterni (e firebug sembra avere problemi con il debug del codice javascript inline). Le librerie vengono memorizzate nella cache, ma i dati non le istanziano (qual è il comportamento desiderato).

L'alternativa è di generare dinamicamente il codice di istanza in un file javascript esterno o in una chiamata AJAX. L'ho fatto anche io, con risultati positivi.

Penso che il fattore decisivo sia la quantità di dati dinamici che hai. Se è necessario rappresentare strutture di dati di grandi dimensioni, lo servirei tramite una chiamata AJAX che restituisce JSON. Se è una semplice chiamata a un costruttore, inseriscilo nel JSP.

Per quanto riguarda la variabile globale, avrò spesso un oggetto globale di livello superiore che dà il via a tutto. Al suo interno, ci sono tutti gli altri riferimenti agli oggetti helper.

Anche se concordo sul fatto che non è del tutto elegante, sono stato conosciuto per farlo alcune volte quando si combinano le decisioni sul lato server con un ambiente integrato AJAX. Eco in linea & Lt; script & Gt; tag per inizializzare alcune variabili non è una cosa terribile, purché nessuno lo veda.

Per quanto riguarda i metodi migliori, non sono a conoscenza di questi. L'ho fatto così raramente che non ho cercato un più elegante o & Quot; proprio & Quot; soluzione.

Va bene con l'uso <script> tag in linea con HTML.Ci sono momenti in cui è necessario, ma per quanto riguarda i modi migliori non lo so.Senza far sembrare le cose più complicate, è più semplice usare il file <script> tag quindi cercando di trovare un modo per implementare i file js.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top