présentation
Les avantages de l'utilisation d'un moteur de templates en PHP (ou ASP, java, ..., ne soyons pas sectaire) ne sont plus à démontrer. Mais à quoi peut servir cette "couche d'abstraction" en javascript ?
Plus de script compliqué pour la manipulation du DOM ;
Transfert de moins voir pas de données entre serveur et client ;
utilisation
Obtenir le script
Première chose à faire : récupérer le script https://github.com/jquery/jquery-tmpl ou utiliser les CDN proposés :
http://ajax.microsoft.com/ajax/jquery.t … ry.tmpl.js
http://ajax.microsoft.com/ajax/jquery.t … mpl.min.js (version minimale)
Définition d'un bloc de template
1.<script id="template_1" type="text/x-jquery-tmpl">
2.<!-- template ici -->
3.</script>
Ne pas oublier l'id du script (qui servira à l'appeler en tant que tpl) et le type "text/x-jquery-tmpl" que le navigateur n'interprètera pas.
tags
Voici une liste non-exhaustive des tags utilisables dans les templates jQuery :
${fieldNameOrExpression} : insère la variable ou le résultat de la fonction javascript fieldNameOrExpression
{{if}} ... {{else}} ... {{/if}} : if ... else classique (j'estime que tous les lecteurs ont au moins des notions de programmation)
01.{{if MainItems.length==0}}
02.<tr>
03.<td>No items selected</td>
04.</tr>
05.{{else}}
06.<tr>
07.<td>Ordered items!</td>
08.</tr>
09.{{/if}}
{{each}} : boucle sur un tableau
1.{{each(i,mi) MainItems}}
2.<tr>
3.<td>
4.${ mi.NumberOrdered } ordered
5.at $ ${ mi.Price} per item
6.</td>
7.</tr>
8.{{/each}}
{{tmpl}} : Insérer un autre template dans le template actuel
01.<script id="movieTemplate" type="text/x-jquery-tmpl">
02.{{tmpl "#titleTemplate"}}
03.<tr>
04.<td>${ Director }</td>
05.</tr>
06.</script>
07.
08.<script id="titleTemplate" type="text/x-jquery-tmpl">
09.<tr class="title">
10.<td>${ Name }
Faire le rendu d'un template
1.var json = {
2.'var1' : 'toto',
3.'var2' : 'tata',
4.};
5.
6.$('#template_1').tmpl(json).appendTo('#elementInHtml');
Selection du template via son id, application de la méthode .tmpl() avec en paramètre un objet json et enfin on l'ajoute en bas de l'élément elementInHtml.
Exemple complet
Déclaration du template :
01.<script id="listTemplate" type="text/x-jquery-tmpl">
02.{{if items.length==0}}
03.<p>Aucun item</p>
04.{{else}}
05.<ul>
06.{{each(i,item) items}}
07.<li>
08.${ item.text }
09.</li>
10.{{/each}}
11.</ul>
12.{{/if}}
13.</script>
Et appel du template :
01.var liste = {
02.'items' : {
03.'0':{"text":"item 1"},
04.'1':{"text":"item 2"},
05.'2':{"text":"item 3"},
06.'4':{"text":"item 4"}
07.}
08.};
09.$('#listTemplate').tmpl(liste).appendTo('#target');
Conclusion
Les templates en javascript peuvent être d'une grande aide pour les applications à fort traffic ou lorsqu'on a des manipulations du DOM répétitives ;
Mais hélas l'accessibilité n'est absolument pas au rendez-vous (javascript obligatoire). Cette technique ne devrait donc être utilisé que dans les services qui ne peuvent déjà pas se passer du javascript.