2010-02-06 6 views
9

Je commence à migrer certaines tâches de génération html d'un environnement côté serveur vers le client. J'utilise jQuery sur le client. Mon but est d'obtenir des données JSON via une API REST et d'utiliser ces données pour remplir HTML dans la page.Cadres de création de modèles côté client pour rationaliser l'utilisation de jQuery avec REST/JSON

En ce moment, lorsqu'un utilisateur clique sur mon site un lien vers Mes projets, le serveur génère du HTML comme ceci:

<dl> 
    <dt>Clean Toilet</dt> 
    <dd>Get off your butt and clean this filth!</dd> 

    <dt>Clean Car</dt> 
    <dd>I think there's something growing in there...</dd> 

    <dt>Replace Puked on Baby Sheets</dt> 
</dl> 

je change cela pour que les projets en cliquant Mes va maintenant Faites une requête GET qui retourne quelque chose comme ceci:

[ 
    { 
    "name":"Clean Car", 
    "description":"I think there's something growing in there..." 
    }, 
    { 
    "name":"Clean Toilets", 
    "description":"Get off your butt and clean this filth!" 
    }, 
    { 
    "name":"Replace Puked on Baby Sheets" 
    } 
] 

Je peux certainement écrire code personnalisé jQuery pour prendre cette JSON et générer le code HTML de celui-ci. Ce n'est pas ma question, et je n'ai pas besoin de conseils sur la façon de le faire.

Ce que je voudrais faire est de séparer complètement la présentation et la disposition de la logique (code jquery). Je ne veux pas créer d'éléments DL, DT et DD via le code jQuery. Je préfère utiliser une sorte de modèle HTML dans lequel je peux remplir les données. Ces modèles peuvent simplement être des extraits HTML qui sont cachés dans la page à partir de laquelle l'application a été chargée. Ou ils peuvent être chargés dynamiquement à partir du serveur (pour prendre en charge des dispositions spécifiques à l'utilisateur, i18n, etc.). Ils pourraient être affichés une seule fois, ainsi que permettre en boucle et répéter. Peut-être devrait-il supporter des sous-modèles, if/then/else, et ainsi de suite.

J'ai beaucoup de listes et de contenu sur mon site qui sont présentés de différentes manières. Je cherche à créer un moyen simple et cohérent de générer et d'afficher du contenu sans créer de code jQuery personnalisé pour chaque fonctionnalité différente sur mon site. Pour moi, cela signifie que j'ai besoin de trouver ou de construire un petit framework au-dessus de jQuery (probablement en tant que plugin) qui répond à ces exigences.

Le seul type de cadre que j'ai trouvé qui est quelque chose comme ceci est jTemplates. Je ne sais pas à quel point c'est bon, car je ne l'ai pas encore utilisé. À première vue, je ne suis pas ravi par sa syntaxe de modèle.

Quelqu'un sait-il d'autres frameworks ou plugins que je devrais examiner? Des articles de blog ou d'autres ressources qui parlent de faire ce genre de chose? Je veux juste m'assurer d'avoir tout examiné avant de le construire moi-même.

Merci!

Répondre

6

Depuis l'affichage de cette question, j'ai trouvé beaucoup d'autres options de création de modèles. J'ai énuméré beaucoup d'entre eux ci-dessous. Cependant, il y avait récemment un jQuery templates proposal qui peut être la solution la plus prometteuse pour le moment. Il y a aussi un discussion about it sur le site de jquery.Voici l'emplacement du projet:

D'autres solutions que j'ai rencontré Include (sans ordre particulier):

1

J'ai utilisé jTemplates un certain nombre de fois et, d'après mon expérience, il remplit son objectif. Si nous limitons la discussion au côté client, alors c'est mon dernier commentaire sur le sujet car il fait le travail et malgré une syntaxe géniale le fait bien, mais sur le côté serveur des choses, je préférerais certainement le scénario où vous envoyez un certain JSON qui est désérialisé à un objet en mémoire, puis validé et transmis à un modèle côté serveur (tel qu'un ASCX dans ASP.NET) où vous avez la pleine puissance de ce langage. À mon avis, si le client prend assez bien en charge JavaScript pour que vous considériez jTemplates, je vous recommande de vous installer une méthode utilitaire JavaScript qui vous permet d'envoyer du JSON et de recevoir du HTML, éliminant ainsi l'intermédiaire moyen. . La plupart des langages ont une capacité d'analyse JSON et jQuery peut automatiquement analyser une réponse de serveur dans JSON en spécifiant le type de retour comme "json".

Même si vous ne recevez pas le JSON du JavaScript, vous pouvez toujours prendre le JSON que vous auriez renvoyé au navigateur et l'envoyer simplement via votre modèle côté serveur. Dans ASP.NET (avec MVC par exemple), vous pouvez avoir des fichiers de template fortement typés qui n'ont pas besoin d'être compilés, ce qui rend les changements beaucoup plus faciles à implémenter. Par conséquent, vous enverriez toujours un balisage, mais il aurait été exécuté à l'aide d'un modèle approprié avec toute la puissance d'un langage de programmation.

+1

Merci pour votre point de vue, mais dans mon cas, le point est de s'éloigner de la génération de HTML côté serveur. Chaque élément de données a beaucoup de propriétés, et tout le HTML requis pour envelopper toutes ces propriétés augmente considérablement la taille de la réponse. Quand je multiplie cela par des centaines d'éléments de données, ma réponse HTML peut être plusieurs fois plus grande que les données brutes elles-mêmes. Puisque mon application utilise ajax et nécessite javascript, pourquoi ne pas le rendre dans le navigateur? – Tauren

+1

S'il existe des centaines d'éléments de données, les performances de JavaScript rendant le balisage seront bien pires que celles d'un langage côté serveur tel que C# ou PHP. Combinez cela avec la mise en cache gzip et AJAX et ce n'est plus vraiment un problème. À moins que vous ne soyez vraiment préoccupé par le temps CPU en 2010, il n'y a pas vraiment de raison de mettre le fardeau sur le visiteur et d'augmenter le temps de rendu. – tags2k

+0

Le temps de calcul et la bande passante ne sont pas mes seules raisons d'aller dans cette direction. Cependant, tout ordinateur non ancien avec un navigateur récent ne devrait pas être trop chargé de la tâche que j'ai en tête. Êtes-vous en train de sous-entendre que le contrôle jqGrid (http://www.trirand.net/demophp.aspx) prendra plus de temps pour télécharger et afficher 1000 lignes de données récupérées via JSON/REST que pour télécharger du HTML déjà formaté et remplacer innerHTML de la grille avec elle? Je suis sûr que l'un ou l'autre chemin est assez négligeable. – Tauren

2

On dirait que vous voulez sammy.js

http://code.quirkey.com/sammy/

Les tutoriels là-bas d'utilisation démo du moteur de template

+0

Merci! J'ai entendu parler de sammy mais je ne l'avais pas encore examiné. Je n'avais pas réalisé qu'il tâtait aussi. Je vérifierai. – Tauren

Questions connexes