Estoy usando jQueryUI y jQuery-tmpl, pero creo que el consejo que estoy buscando es lo suficientemente amplio como para aplicarlo a cualquier tipo de biblioteca de plantillas.¿Cómo combinar widgets de jQuery-UI con plantillas de jQuery?
El problema que tengo es que a menudo voy a tener algún tipo de widget de ABM en mi plantilla
<script id="some-widget-template">
<div class="some-widget">
<input name="NameField"/>
<button id="some-widget-save">Save</button>
</div>
</script>
Eso me deja con un widget muy legible que puedo volver y editar, etc. Excepto que se es feo Usando jQueryUI puedo hacer que el botón sea muy bonito, pero requiere algo de Javascript. Así que en mi controlador Javascript correspondiente, el código se verá así:
$("#some-widget-template")
.render(arrayOfDataObjects)
.appendTo("body");
$("#some-widget-save").button();
Por esa ejemplo muy simple, esto funciona bien. Mi controlador, sin embargo, rápidamente se llenará de más elementos que necesitan transformarse. También parece que esta debería ser la preocupación del motor de visualización/plantillas, sin mencionar las cadenas mágicas ("# alguna-widget-guardar") que degradan la capacidad de mantenimiento del código.
¿Cuál es la mejor manera de hacerlo? Seguramente no puedo ser la primera persona en encontrarse con este problema. He pirateado jquery-tmpl para que antes de devolver un objeto jQuery, busque un elemento de botón y, si lo encuentra, lo transforme en un elemento de botón apropiado. Esto parece lento, ya que tendrá que atravesar cada elemento en la plantilla. ¿Algunas ideas?
Editar: Encontré que al usar CSS3, el 90% de mis problemas fueron eliminados. Al compilar para navegadores no compatibles con CSS3, uso el método de fábrica.
Gracias por su respuesta detallada. Esta es la ruta que fui inicialmente, el inconveniente es que no todas mis plantillas se representan en la inicialización del widget. Diferentes eventos activarán plantillas adicionales después de la primera inicialización. Creo que lo mejor sería una funcionalidad en vivo de jQuery, aunque no sé cómo se lograría. –
Ah, lo entiendo. Una solución alternativa que puedo imaginar es crear una fábrica de envío de eventos (o, alternativamente, activada por devolución de llamada) que maneje la creación de los elementos de la plantilla a partir de los datos sin procesar. Puede pasar los datos a un método en la fábrica (es decir, factory.buildTemplate ('data')), y la fábrica podría responder con una devolución de llamada o evento activando una función que aplicaría automáticamente un widget UI basado en atributos y propiedades del Nodo DOM pasado a él. Déjame saber si esto te parece razonable, y escribiré un poco de código psuedo =] – cdata
Vaya, parece que solo obtuviste la mitad de la recompensa. Lo siento, esta fue mi primera recompensa ... Pensé que todo lo que tenía que hacer era marcar la mejor respuesta. –