Es un bonito abstracción que coincide con un lado del cliente ingenieros toman sobre cómo el DOM está construido y modificado. En ese sentido, es "más limpio" porque hay un modelo mental. También es bueno porque no tenemos que mezclar un sinfín de sintaxis dispares de un lenguaje de plantillas además de un marcado declarativo limpio como es el caso incluso con el sistema de plantillas más "estúpido", como el bigote.
Yo NO diría que es más eficiente usar jsdom para plantillas. Ve a echar un vistazo a google wrt para 'pérdidas de memoria con jsdom', por ejemplo. jsdom es radical, y es súper útil para tareas como proyectos de fin de semana para rastrear sitios, realizar tareas no relacionadas con el servidor, pero creo que es lento como una mierda desde una perspectiva de servidor web de alto rendimiento.
Hay mil millones de formas de factorizar esto. Ningún método ha surgido como una forma "estándar". Una forma que he visto es enviar una 'plantilla' vacía, es decir, un bloque de html que representa un modelo de alguna manera, y luego usar eso para arrancar la construcción de su vista final desde un modelo. A partir de ese artículo, por ejemplo:
<li class="contact" id="contact-template">
<span class="name"></span>
<p class="title"></p>
</li>
Esta es la 'vista' en el sentido clásico.En la aplicación web típica, que podría ser algo más como:
<li class="contact">
<span class="name"><?= $name ?></span>
<p class="title"><?= $title ?></p>
</li>
Para utilizar MVC, se propone un controlador que es vagamente consciente de la semántica de la opinión anterior y el modelo que representa. Esta vista se analiza en/a DOM y se accede a través de su motor de selección favorito. Cada vez que el modelo que esto representa cambia, puede usar cambios de eventos o devoluciones de llamada para actualizar la vista. Por ejemplo:
Imaginemos que el 'modelo' dispara un evento de 'cambio' cada vez que cambia una propiedad.
controller = new Controller({
view: $('#contact-template').clone(), // Assume jquery or whatever
model: aContact
});
// Assume some initialization that sets the view up for the first time
// and appends it to the appropriate place. A la:
// this.view.find('.name').text(model.name);
// this.view.find('.title').text(model.title);
// this.view.appendTo('#contacts')
controller.on('model.name.change', function(name){
this.view.find('.name').text(name);
});
Estos son los sistemas que Weld y Backbone.js hacen por ti. Todos tienen diferentes grados de suposiciones sobre dónde se está llevando a cabo este trabajo (lado del servidor, lado del cliente), qué marco está usando (jquery, mootools, etc.) y cómo se están distribuyendo sus cambios (REST, socket. io, etc.)
Editar
Algunas cosas realmente útiles que puede hacer con jsdom giran en torno a las pruebas de integración y rastreo:
Personalmente, me gustaría ver un proyecto que tomó el enfoque de Tobi, pero mapeados en la parte superior de algo así como https://github.com/LearnBoost/soda tal que podemos hacer pruebas de selenio basado en la nube sin Selenese (ya que imo, es una mierda).
Estos deben ser de 3 preguntas separadas. – mikerobi
@mikerobi ¿tú crees? Puedo refactorizarlos en tres preguntas si eso fuera mejor. – Raynos
¿Se puede ver una vista sin un motor de plantillas? – jcolebrand