Bibliothèque de modèles JavaScript HTML recommandée pour JQuery? [fermé]


89

Des suggestions sur la bibliothèque de modèles HTML qui irait bien avec JQuery? Google propose un certain nombre de bibliothèques, mais je ne suis pas sûr qu'il existe une bibliothèque bien reconnue qui résisterait à l'épreuve du temps.


21
Disons que vous ramenez un objet json avec 100 enregistrements. Chaque enregistrement doit générer le même fragment html. Cela aide simplement à utiliser un modèle que de générer le balisage dans js. Permet à un concepteur de le concevoir également plutôt que le balisage se trouvant à l'intérieur d'une chaîne dans une fonction js
redsquare

3
@cletus - car il est plus facile d'utiliser un modèle au format html qu'une chaîne d'ajouts
Andrey

2
Utilisez cette comparaison de performances
AM

Réponses:


58

Eh bien, pour être franc, la création de modèles côté client est très populaire de nos jours, mais tout à fait une jungle.

les plus populaires sont, je crois:

  • pure : il utilise uniquement js, pas sa propre "syntaxe"
  • moustache : assez stable et agréable j'ai entendu.
  • jqote2 : extrêmement rapide selon jsperfs
  • modèles jquery (obsolètes):

il y en a beaucoup d' autres, mais vous devez les tester pour voir ce qui vous convient le mieux et le style de votre projet.

Personnellement, j'ai du mal à ajouter une nouvelle syntaxe et un ensemble de logique ( mélange de logique et de modèle, bonjour ?? ), et je suis allé purement js. Chacun de mes modèles est stocké dans son propre fichier html (./usersTable.row.html). J'utilise des modèles uniquement lors de l'ajaxage du contenu, et j'ai peu de fichiers js "logiques", un pour les tables, un pour div, un pour les listes. et même pas un pour les options de select (où j'utilise une autre méthode).

Chaque fois que j'essayais de faire quelque chose de plus complexe, je découvrais que le code était moins clair et me prenait plus de temps à se stabiliser que de le faire «à l'ancienne». La logique dans le modèle est un non-sens absolu à mon avis, et l'ajout de sa propre syntaxe n'ajoute que des bogues très difficiles à tracer.


14

jTemplates

un moteur de template pour JavaScript.

Plugin vers jQuery ...

Fonctionnalités:

  • 100% en JavaScript
  • précompilateur
  • Soutenir JSON
  • Travailler avec Ajax
  • Autoriser l'utilisation du code JavaScript à l'intérieur du modèle
  • Permettre de créer des modèles en cascade
  • Permettre de définir des paramètres dans les modèles
  • Rafraîchissement en direct! - contenu de mise à jour automatique du serveur ...

8

Il existe un document de discussion raisonnable sur ce sujet ici , qui couvre une gamme d'outils de création de modèles. Pas spécifique à jQuery, cependant.


5

Plugin jQuery Templates créé par Microsoft et accepté comme plugin jQuery officiel.

Mais notez qu'il est désormais obsolète.


13
et "obsolète" depuis. Le développement est interrompu et cela ne sortira pas de la version bêta. un mec ms et l'équipe jquery-ui travaillent sur un nouveau modèle, basé sur JSRender tu;)
roselan

Huh, dommage - Je l'utilise partout dans mon application Web: (Merci pour le conseil! Avez-vous un lien sur le prochain moteur de création de modèles que vous avez mentionné?
Andrey

1
si tout se passe bien, jsrender de boris moore le trouvera dans jquery-ui. Pas besoin de te dépêcher je suppose;)
roselan

1
J'ai implémenté jsRender dans un projet et c'est tout simplement incroyable. Ça vaut le détour.
ASeale

4

Je vérifierais json2html , il évite d'avoir à écrire des extraits de code HTML et s'appuie à la place sur des transformations JSON pour convertir les tableaux d'objets JSON en listes non structurées. Très rapide et utilise la création DOM.


4
avertissement .. J'ai écrit ceci. Mais ça vaut le détour;)
Chad Brown

3

Il y a quelques années, j'ai construit IBDOM: http://ibdom.sf.net/ | Depuis décembre 2009, il prend en charge la liaison jQuery si vous l'obtenez directement depuis le coffre.

$("#foo").injectWith(collectionOfJavaScriptObjects);

ou

$("#foo").injectWith(simpleJavaScriptObject);

De plus, vous pouvez maintenant placer tous les marqueurs "data: propName" dans les attributs class = "data: propName other classnames", de sorte que vous n'ayez pas à joncher le contenu de votre application avec ces marqueurs.

Je n'ai pas encore mis à jour une partie de la documentation là-dessus pour refléter mes récentes améliorations, mais j'ai eu différentes versions de ce cadre en production depuis 2007.

Aux sceptiques de cette question:

À l'époque où Microsoft a inventé avec IE5 ce que nous appelons maintenant XmlHttpRequest et le modèle «ajax», une partie de la promesse derrière cela était d'échanger purement des données entre un navigateur Web et le serveur. Ces données devaient être encapsulées dans XML, car en 1999/2000, XML était tout simplement très chaud. Au-delà de la récupération d'un document xml sur le réseau avec un mécanisme de rappel, le composant MSXML ActiveX de MS a également pris en charge une mise en œuvre préliminaire de ce que nous appelons maintenant XSL-T et XPath.

La combinaison de la récupération de HTTP / XML, XPath et XSL-T a donné aux développeurs une grande créativité pour créer des «documents» riches qui se comportaient comme des «applications», uniquement en envoyant et, plus important encore, en récupérant des données sur le serveur.

Pourquoi est-ce un modèle utile? Cela dépend de la complexité de votre interface utilisateur et de l'importance que vous accordez à sa maintenabilité.

Lors de la construction d'une interface sémantiquement balisée visuellement très riche avec CSS avancé, la dernière chose que vous voulez faire est de découper des morceaux de balisage en "mini-contrôleur / vues", juste pour que vous puissiez .innerHTML un fragment de document dans le fichier principal document, et voici pourquoi.

Un principe clé pour garder une interface utilisateur html / css avancée gérable, est de préserver sa validation au moins pendant sa phase active de développement. Si votre balisage se valide, vous pouvez vous concentrer sur vos bogues CSS. Maintenant, si des fragments de balisage finissent par être injectés au cours des différentes étapes de l'interaction utilisateur, tout devient très difficile à gérer et le tout devient fragile.

L'idée était d'avoir toutes vos constructions d'interface utilisateur de balisage dans un seul document, de récupérer UNIQUEMENT DES DONNÉES sur le réseau et d'utiliser un cadre solide qui injectera au moins simplement vos données dans vos constructions de balisage, et au plus répliquer les constructions de balisage que vous avez marqué comme répétable.

Cela était possible avec XSL-T et XPath dans IE5 +, mais pratiquement aucun autre navigateur. Certains frameworks de navigateur F / OSS ont essayé XPath, mais ce n'est pas tout à fait quelque chose sur lequel nous pouvons compter pour le moment.

Alors, quelle est la meilleure chose à faire pour obtenir un tel modèle? IBDOM. Récupérez les données de votre serveur, injectez-les dans votre document. sans effort.


une dernière chose: IBDOM utilise des méthodes DOM 100% pures et zéro innerHTML.
Chris Holland du

une autre note: IBDOM implémente ce que j'appelle "forkedLoopExecution" qui est un composant utilisé en interne ainsi que quelque chose qui est utilisable seul. Voici le problème: disons que vous modifiez le DOM via createElement et appendChild, dans une sorte de construction en boucle qui doit parcourir un assez grand tableau d'objets Big Data: la plupart des navigateurs ne «repeindront» pas l'interface utilisateur, jusqu'à ce que le code affectant le DOM "retourne". Dans une grande "boucle for" avec beaucoup de données, nos résultats de recherche peuvent prendre entre une demi-seconde et quelques secondes avant d'afficher le tout en un seul morceau.
Chris Holland du

la solution: l'exécution en boucle fourchue exploite l'exécution récursive induite par setTimeout tout au long de la vie de la collecte de données répétée pour essentiellement «retourner et repeindre» à chaque itération de la boucle, vous donnant cette sensation de rendu instantané: «donnez à l'utilisateur quelque chose à regarder -à droite friggin maintenant ".
Chris Holland du

2

Vous devriez jeter un oeil sur Javascript-Templates, il s'agit d'un petit moteur de template utilisé dans le célèbre plugin jQuery File Upload, et développé par le même auteur, Sebastian Tschan (@blueimp)

https://github.com/blueimp/JavaScript-Templates

Suivez le guide d'utilisation de Sebastian, supprimez simplement cette ligne

document.getElementById("result").innerHTML = tmpl("tmpl-demo", data);

Remplacez-le par celui-ci

$('#result').html(tmpl('tmpl-demo', data));

N'oubliez pas d'ajouter la balise de résultat div dans votre fichier HTML également

<div id="result"></div>

Prendre plaisir

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.