2010-12-19 29 views
14

Con el evento del complemento de plantillas jQuery, me pregunto cómo mantener las plantillas del lado del servidor y del lado del cliente.Plantillas del lado del servidor, plantillas del lado del cliente - ¿Conversión automática?

Debido a que en mi caso, tengo algunas plantillas, eso sería duplicados - del lado del servidor, así como del lado del cliente. Imagínese esto:

Tiene un formulario, donde se puede introducir puntos de la lista. Cuando presiona enviar, se genera una solicitud AJAX pero la entrada ya se muestra en su página.

Ahora, el margen de beneficio para esta viñeta debe ser el mismo - wether se genera a través de JS o por mi PHP/.NET/alguna aplicación.

¿Hay buenas maneras de mantener las plantillas/mantenerlos sincronizados? ¿O realmente tengo que mantener manualmente ambas plantillas?

¿Cuál es su experiencia en aplicaciones que usan plantillas JS?

+0

Gran punto que aparece, y me sorprende que no se hable más. Le pregunté a Phil Haack sobre esto (http://haacked.com/archive/2010/11/09/asp-net-mvc-3-release-candidate.aspx). Esta respuesta fue confusa. Dave Ward también menciona la necesidad de jquery tmpl view engine - http://encosia.com/2010/12/02/jquery-templates-composite-rendering-and-remote-loading/. – redsquare

+0

Acabo de ver https://github.com/awhatley/jquery-tmpl.net y https://github.com/xyu/jquery-tmpl-php - Ambos intentan portar el motor jQuery tmpl a .NET/PHP. –

+0

Agregó un caso de uso interesante que puede serle útil algún día. Buena pregunta que tuvimos que resolver hace un par de meses. – MarioRicalde

Respuesta

0

Mi compañero de trabajo es el autor del analizador .NET usted menciona, por lo que lo he usado un poco para compartir plantillas entre el cliente y el servidor. Para que quede claro: es la misma plantilla, el mismo archivo, sin importar si se analiza en el cliente o servidor. Así que no hay dolores de cabeza de duplicación/mantenimiento, lo cual es muy bueno.

La única advertencia que hemos encontrado es la lógica avanzada. Los datos que representa la plantilla deben estar más o menos listos para imprimir en el momento de la representación. Así que las comprobaciones de las longitudes de los arreglos deben ser booleanas con el resultado, las cadenas deben estar pluralizadas, las fechas deben formatearse, etc. Creo que Aaron está trabajando en una forma de pasar funciones en la versión .NET, como parámetros con nombre, de modo que p.ej una función de pluralización disponible en el alcance de la plantilla en el lado del cliente podría replicarse en C# y usarse de la misma manera en el servidor, permitiendo que ocurra más lógica y procesamiento dentro de la plantilla. Aún así, incluso tener que preprocesar los datos, ha sido increíblemente útil.

-1

Uso XSLT para esto. No todo el mundo es un fan de su sintaxis, pero es crossbrowser, rápido y funciona - e incluso se puede tener plantillas del lado del cliente sin mucho si cualquier secuencias de comandos en absoluto mediante el uso de una forma que apuntan a un iframe incrustado - para tener la ventaja de documentos pequeños sobre el cable (un poco más grandes que json, pero no mucho). los dispositivos con iOS no son compatibles; estos necesitarían usar la versión con plantilla de servidor, pero lo bueno es que eso es trivialmente posible con las mismas plantillas.

No soy un gran admirador de las bibliotecas de plantillas javascript: son complejas, dependen de la versión, generalmente tienen herramientas deficientes, pueden romperse a medida que cambian los navegadores, y generalmente lo vinculan a bibliotecas javascript determinadas.

5

Si te gusta JS-> prioridad PHP :) entonces usted tiene este dos jquery-tmpl procesador de plantilla compatible para el motor que PHP

  1. https://github.com/abackstrom/jquery-tmpl-php
  2. https://github.com/xyu/jquery-tmpl-php

Si prefiere más PHP-> JS priority :) entonces puedes probar esta implementación de JavaScript de las populares plantillas de PHP Smarty

  1. http://code.google.com/p/jsmart/

O puede intentar algo más neutral como:

  1. bigote http://mustache.github.com/
0

por lo general almacenarlos en la vista ; aquí les voy a contar acerca de un caso de uso realmente interesante que encontré para jquery-tmpl.

He usado jquery-tmpl en un sitio que, debido a la gran cantidad de solicitudes, requería una técnica que llamo decontextualization. Esta técnica se implementó solo para mantenerse activo durante las horas pico y consiste únicamente en las siguientes reglas:

  1. Nunca toque el servidor para regenerar la página más de una vez; a menos que sea absolutamente necesario.
  2. Utilice JavaScript para proporcionar un estado de que es el usuario y qué privilegios tiene.

Con esas dos reglas en mente puede observar que jquery-tmpl con el básico de la lógica que siempre era simplemente majestuosa para el caso dado. Lo que hice básicamente fue incluir las plantillas jquery-tmpl en los documentos que debían descontextualizarse. Todas las plantillas fueron provistas por la página misma; por lo que podría hacer una librería javascript d18n que podría hacer lo siguiente:

  1. consulta un guión muy rápido sobre el usuario actual, los datos regresar como un objeto JSON.
  2. Recorre el JSON e incluye las plantillas proporcionadas en el documento en los selectores especificados. Deje que jquery-tmpl haga los cálculos.

Cada vez que teníamos que hacer una modificación a la "tempalte" Nos gustaría hacerlo de la misma manera que lo haríamos si no había jquery-tmpl disponibles: en la vista/PARCIAL.

¿Vería algo como esto para una "publicación de usuario puede editar?" plantilla:

<script id="post-edit-button" type="text/x-jquery-tmpl"> 
    {{if user_id == "<%= post.user.id %>" || role == "staff" || $.inArray(user_id, EDITORS) }} 
    <a href="<%= edit_post_url(post) %>">Edit</a> 
    {{/if}} 
</script> 

Espero que mi experiencia sea útil para ti en algún grado.

Cuestiones relacionadas