2010-01-12 4 views
3

J'écris une application qui rend une liste d'objets "Job" à partir d'une réponse AJAX JSON.Rendu du contenu HTML à partir du résultat AJAX

Quelle est la meilleure façon de restituer le balisage à partir des données renvoyées. Maintenant, je suis assez convaincu que c'est une mauvaise idée de générer un balisage HTML côté serveur et de le renvoyer de l'appel AJAX. Par expérience, cela rend le HTML difficile à maintenir et le fait de factoriser le contenu est un cauchemar, donc je retourne une collection d'objets Job en JSON.

La question, alors, est comment rendre le HTML basé sur l'entrée de l'utilisateur? J'ai vu quelques exemples d'avoir votre modèle de balisage sur la page puis utiliser JQuery pour le cloner et remplir avec les données pertinentes l'insérer dans le DOM. Le problème avec ceci est que le modèle contient du contenu visible (images et autres) et que l'application doit se dégrader. J'ai donc un répéteur sur la page qui code le code et charge au chargement de la page si JS n'est pas disponible.

Tout conseil serait apprécié.

Répondre

3

John Resig (le mec jQuery) a fait un moteur de template super simple que vous pouvez utiliser clientide, Rick Strahl a a good post à ce sujet. Trimpath propose une solution géniale de création de modèles de clients, baptisée Javascript Templates, qui n'est pas la plus imaginative, mais elle est vraiment très bonne.

Je ne pas normalement des liens Google, mais asp.net ajax (4.0?) A une client side templating venir que va vous permettre de prendre les objets JSON et les DataBind directement dans.

A défaut, je Je vais être des diables défendre et dire "Qu'est-ce qui ne va pas avec HTML sémantique" ?. Tant que c'est sémantique, et a des classes plutôt que des styles codés en dur, je ne vois personnellement rien de mal à retourner le HTML de votre appel côté serveur. Bien sûr, ce n'est pas comme pur comme d'autres solutions, mais c'est un site facile à mettre en place. Dans certains cas, j'ai même trouvé qu'il est plus facile à maintenir car vous laissez le "serveur de codage" retourner HTML avec des classes intégrées et le "clientide coder" peut le faire jusqu'à 6 façons de dimanche :-)

+0

+1 pour les liens du moteur de Template, je pense que c'est exactement ce que je cherche. Je ne suis pas d'accord sur le retour html des méthodes JS cependant. Je suppose que c'est en partie un puriste à 3 niveaux, mais il est aussi dans un coin si des changements sont nécessaires dans le frontend, le code serveur a besoin d'être factorisé et il est difficile de lire et de maintenir du HTML. sont utilisés pour construire le balisage. Même les meilleures techniques Stringbuilder/string.Format causent des maux de tête aux développeurs frontend. – Sheff

+0

+1 Tu m'as battu dessus. J'utilise le micro-template de Resig depuis un moment et ça augmente ma productivité. –

+0

Pas de soucis, je vous entends fort et clair sur le html des méthodes JS.Il semble juste sale la plupart du temps, dans tous mais la plus sémantique des lieux :-) –

1

En fonction de la complexité de vos données, il peut être possible de générer le code HTML à l'aide d'objets jQuery. Cela semble encore assez jolie et est plus maintenable que simplement écrire HTML brut:

$.ajax({ 
    url: 'foo', 
    dataType: 'json', 
    success: function(data) { 



     var container = $('<div />') 
         .attr('id', 'container'); 

     for(var i in data.items) { 
      var child = $('<div />') 
         .addClass('container-child'); 

      var title = $('<p />') 
         .html(data.items[i].title) 
         .addClass('item-title'); 

      var description = $('<p />') 
           .html(data.items[i].description) 
           .addClass('item-description'); 

      child.append(title).append(description); 

      container.append(child); 
     } 

     // Remove existing container 
     $('div#container').remove(); 
     // And replace it with the just created one 
     $('body').append(container); 
    } 
}); 

Cette méthode est aussi rapide que l'aide d'un élément HTML « factice », le clonage qui et peuplant les éléments de l'enfant avec des valeurs correctes. À mon avis, c'est plus propre et plus facile à comprendre.

+0

Hmmm, je fais préférez cela à l'écriture côté serveur de balisage, mais je dirais toujours qu'il n'est pas très maintenable, en particulier si notre développeur frontend veut juste faire un rapide amendement. Je suis d'accord mais il devrait être assez rapide. Je suppose qu'il n'y a pas de façon "parfaite" de le faire sans passer au cadre MVC. – Sheff

Questions connexes