Annonce ToutSurTout

Bienvenue sur toutsurtout.biz

Déjà 15 ans !

Radio TST

Si vous souhaitez participer vous aussi aux discussions sur le forum, il faut vous inscrire ou vous identifier.

Le Thème TST Automne est maintenant en place.

Les inscriptions sont actuellement OUVERTES.

Message 1 Discussion postée le 13-03-2013 à 04:15:37

Philippe
Avatar de Philippe


Titre: Banni
Avancement: Niveau 3
Date d'inscription: 26-09-2009
Messages: 3 660

jquery-tmpl - le moteur de templates jQuery

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.


https://www.world-lolo.com/images/uploads/image.num1445754529.of.world-lolo.com.jpg
Des stades aux entrées payantes sont pleins de gens qui pensent que ceux qu'ils applaudissent sont trop payés, et les bibliothèques à l'entrée gratuite sont vides des gens qui pensent que les livres sont trop chers ...