2010-11-16 16 views
6

¿Alguien ha intentado usar jQuery templates (o cualquier otra plantilla basada en JavaScript) en el lado del servidor con algo como env.js?plantillas de jQuery en el lado del servidor

Estoy considerando intentarlo para ver qué beneficios se pueden obtener al poder mostrar plantillas idénticas en el lado del cliente o del servidor de una aplicación web, pero esperaba que alguien ya tenga alguna experiencia, o conozca de un proyecto existente haciendo esto. Me interesaría especialmente saber sobre cualquier problema de rendimiento que pueda encontrar en comparación con algún motor de plantillas más tradicional.

Recapitular: ¿Alguien ha usado alguna vez plantillas de jquery en el sitio del servidor? Si es así, ¿hubo problemas de rendimiento u otros problemas con los que me pueda encontrar?

+0

¿Exactamente de tu pregunta? (ver también [¿Hay un motor de plantilla para Node.js?] (http: // stackoverflow.com/questions/1787716/is-there-a-template-engine-for-node-js)) –

+0

El lado del servidor es más confiable porque el lado del cliente no conoce las especificaciones del usuario, y podría disminuir drásticamente el rendimiento en el usuario final – RobertPitt

+2

Es posible que desee ver el blog de @ getify (http://blog.getify.com/) - se enfurece sobre la paridad de los mecanismos de creación de plantillas y validación entre el cliente y el servidor * todo el tiempo * – Pointy

Respuesta

0

Un amigo mío que trabaja en un proyecto de Programación Genética distribuida utilizó un sistema de plantilla lateral js sevrer para gestionar todos los trabajadores web generados en todos los navegadores de los usuarios. Su código está aquí: github. No sé qué tan útil será, pero sé que fue bastante simple de implementar e hizo cosas increíbles. Por lo fácil que lo encontró, recomendaría un sistema de plantilla js.

0

Escribir código del lado del servidor para procesar las plantillas jQuery es bastante trivial.

Aquí está some very basic vb.net code He creado que devolverá el resultado de una cadena de plantilla jquery a una matriz de cualquier objeto. Actualmente sólo lo hace la sustitución de valores de datos

Public Shared Function RenderTemplate(template As String, list As Array) As String 
    Dim myRegexOptions As RegexOptions = RegexOptions.Multiline 
    Dim myRegex As New Regex(strRegex, myRegexOptions) 
    Dim splits = myRegex.Split(template) 
    Dim matches = myRegex.Matches(template) 

    Dim i As Integer = 0 
    Dim swap As Boolean = False 
    Dim str As New StringBuilder 
    For Each item In list 
     swap = False 
     For i = 0 To splits.Length - 1 
      If swap Then 
       str.Append(CallByName(item, splits(i), CallType.Get, Nothing)) 
      Else 
       str.Append(splits(i)) 
      End If 
      swap = Not swap 
     Next 
    Next 
    Return str.ToString 
End Function 

Así que si he enviado en el siguiente ...

Dim strTargetString As String = "<p><a href='${Link}'>${Name}</a></p>" 
Dim data As New Generic.List(Of TestClass) 
data.Add(New TestClass With {.Link = "http://stackoverflow.com", .Name = "First Object"}) 
data.Add(New TestClass With {.Link = "http://stackexchange.com", .Name = "Second Object"}) 
Return Render(strTargetString, data.ToArray) 

Sería de salida como una cadena

<p><a href='http://stackoverflow.com'>First Object</a></p> 
<p><a href='http://stackexchange.com'>Second Object</a></p> 

Esto funcionará Mucho más rápido que generar un objeto de navegador falso en el servidor y ejecutar toda la biblioteca jQuery solo para reemplazar algunas etiquetas.

+0

Es fácil para representar las plantillas de caso más sencillas, pero ¿qué ocurre cuando las plantillas incluyen llamadas de funciones a las funciones de JavaScript (que no es poco común en los escenarios del mundo real)? Eso es difícil sin usar JavaScript en el lado del servidor. –

4

env.js es innecesario.

<plug shameless="true">

yo estoy en el proceso de specing y re-implementar plantillas de jQuery para que puedan ser utilizados de forma independiente del DOM. Ver https://github.com/mikesamuel/jquery-jquery-tmpl-proposal para el código y demos. La especificación está disponible en http://wiki.jqueryui.com/w/page/37898666/Template y dice:

Centrado en el texto en lugar de DOM. Estado: hecho. Ver la sección 12 implementaciones. foo $ {bar} se traduce en algo muy similar a function (data, options) {return "foo" + bar; } Modulo algunos dethunking de la barra

...

Esto permitirá utilizar este motor de plantillas en el lado del servidor JavaScript medio ambiente, como Node.js, o Java/rhino

me gustaría retroalimentación y puede ayudarlo a comenzar.

</plug>

Cuestiones relacionadas