June09
Templating con javascript
Da sviluppatore (anche) JavaScript, una dei compiti che odio fare riguarda la definizione di template per l'inserimento in pagina di contenuti ottenuti successivamente rispetto al download della stessa grazie ad una richiesta AJAX a file JSON o XML. Odio fare questa attività perchè spesso viene realizzata con script incasinati che mischiano stringhe contenenti puro HTML a variabili contenenti dati.
Un esempio di questo brutto approccio potrebbe essere:
Per questo motivo credo che una bella analisi delle librerie presenti sul web che si occupano appunto di migliorare questo compito non può che far bene.
La prima libreria della quale parlerò è EJS (Embedded JavaScript embeddedjs.com) che sfrutta la sintassi di ERB (templating system per ruby). L'approccio di EJS è quello di utilizzare un file esterno che viene richiamato via AJAX per il template e che viene popolato a partire da un JSON (locale o scaricato a sua volta da remoto). L'aspetto della suddivisione delle componenti (grafica + dati) è sicuramente un aspetto positivo, ma personalmente non mi piace troppo è la necessità di effettuare richieste aggiuntive (anche se ottimamente cachate dalla libreria) per i vari template.
La seconda libreria analizzata si chiama JavaScriptTemplates (code.google.com/JavaScriptTemplates) ed è un modulo (comunque indipendente) di un framework MVC di nome TrimPath. Rispetto alla precedente, questa incapsula i template nella pagina dell'applicazione limitando quindi le richieste AJAX ai dati richiesti. I template possono essere inseriti nella pagina in due modi diversi. Il primo, forse più comodo ma un po' troppo invasivo nel markup, è quello di creare delle <textarea/> nascoste contenenti appunto il frammento HTML da popolare successivamente. Il secondo approccio, più pulito ma anche scomodo, è quello di utilizzare delle stringhe JavaScript che verranno compilate in HTML partendo sempre da un JSON contenendo il modello di dati da mostrare all'utente.
Oltre a queste librerie ne esistono altre, anche sviluppate sulla base di engine popolari come jQuery o MooTools, ma il loro comportamento può essere ricondotto a una di questi due approcci, ovvero l'utilizzo di file esterni con una richiesta AJAX in più per template oppure l'inserimento del template in pagina tramite <textarea/> o variabili JavaScript.
Nessuno dei due approcci mi appassiona molto tant'è che non riesco a eleggerne uno come migliore.
var html = "<h1>"+data.title+"</h1>"
html += "<ul>"
for(var i=0; i<data.items.length; i++) {
html += "<li><a href='supplies/"+data.items[i]+"'>"
html += data.items[i]+"</a></li>"
}
html += "</ul>"
Non è per nulla un bel modo di lavorare giusto?
Per questo motivo credo che una bella analisi delle librerie presenti sul web che si occupano appunto di migliorare questo compito non può che far bene.
La prima libreria della quale parlerò è EJS (Embedded JavaScript embeddedjs.com) che sfrutta la sintassi di ERB (templating system per ruby). L'approccio di EJS è quello di utilizzare un file esterno che viene richiamato via AJAX per il template e che viene popolato a partire da un JSON (locale o scaricato a sua volta da remoto). L'aspetto della suddivisione delle componenti (grafica + dati) è sicuramente un aspetto positivo, ma personalmente non mi piace troppo è la necessità di effettuare richieste aggiuntive (anche se ottimamente cachate dalla libreria) per i vari template.
La seconda libreria analizzata si chiama JavaScriptTemplates (code.google.com/JavaScriptTemplates) ed è un modulo (comunque indipendente) di un framework MVC di nome TrimPath. Rispetto alla precedente, questa incapsula i template nella pagina dell'applicazione limitando quindi le richieste AJAX ai dati richiesti. I template possono essere inseriti nella pagina in due modi diversi. Il primo, forse più comodo ma un po' troppo invasivo nel markup, è quello di creare delle <textarea/> nascoste contenenti appunto il frammento HTML da popolare successivamente. Il secondo approccio, più pulito ma anche scomodo, è quello di utilizzare delle stringhe JavaScript che verranno compilate in HTML partendo sempre da un JSON contenendo il modello di dati da mostrare all'utente.
Oltre a queste librerie ne esistono altre, anche sviluppate sulla base di engine popolari come jQuery o MooTools, ma il loro comportamento può essere ricondotto a una di questi due approcci, ovvero l'utilizzo di file esterni con una richiesta AJAX in più per template oppure l'inserimento del template in pagina tramite <textarea/> o variabili JavaScript.
Nessuno dei due approcci mi appassiona molto tant'è che non riesco a eleggerne uno come migliore.
Oggi ho letto un interessante articolo riguardo al prossimo standard HTML 5 e vorrei riproporlo, sintetizzato, su queste pagine. 