2011-03-05 11 views
21

Intento utilizar Freemarker junto con las plantillas de jQuery.

Ambos marcos usan signos de dólar/llaves para identificar expresiones de sustitución (o como se llaman en freemarker, "interpolaciones"), p. ${person.name}.

Así que cuando defino una plantilla jQuery con expresiones en esa sintaxis, Freemarker intenta interpretarlas (y falla).

que he probado varias combinaciones de escapar de la secuencia ${ pasarlo por Freemarker en vano - \${, \$\{, $\{, etc.

Insertar un comentario en FreeMarker entre el dólar y el rizado (por ejemplo $<#-- -->{expression}) FUNCIONA, pero estoy buscando una solución más concisa y elegante.

¿Hay una forma más simple de obtener una plantilla de Freemarker para generar la secuencia de caracteres ${?

Respuesta

38

Esto debería imprimir $ {} person.name:

${r"${person.name}"} 
1

¿Has probado $$?

Encontré en el manual de Freemarker que ${r"${person.name}"} imprimirá ${person.name} sin intentar representarlo.

Tal vez también hay que echar un vistazo a Freemarker escaping freemarker

3

Si ${ es su único problema, entonces se podría utilizar la sintaxis alternativa en el jQuery Templates plugin como este: {{= person.name}}

Quizás un poco más limpio que escapándolo.

+0

Definitivamente más limpio. ¡Gracias por el consejo! –

4

Otra opción es usar #include con la opción parse = false. Es decir, coloque sus plantillas jQuery en la página de inclusión separada y use parse = false para que freemarker no intente analizarlas.

Esta sería una buena opción cuando las plantillas son más grandes y contienen comillas dobles.

15

Además, si tiene secciones más largas sin marca de FreeMarker, puede usar <#noparse>...</#noparse>.

Si usted tiene este problema mucho, también se puede implementar un TemplateLoader que simplemente llama a otro TemplateLoader, pero luego en el texto devuelto (que es el código fuente tempalte, no su salida) que sustituye a todos los @{...} -s con ${...} y todos ${...}-s con ${'$'}{...}. Por lo tanto, podría usar @{...} para interpolaciones de FreeMarker. Esto es un poco más complicado de lo que parece, porque para ser 100% correcto, debe detectar cuándo se producen los tokens especiales dentro de los literales de cadena, en cuyo caso no debe reemplazarlos. Además, el editor y los complementos IDE no funcionarán tan bien.

0

En el caso cuando se desea utilizar cadenas no primas para que pueda escapar comillas, apóstrofes, etc., puede hacer lo siguiente:

Imagine que desea utilizar la cadena $ {Hola} - "Amigo de mi amigo" dentro de una cadena.No puedes hacer eso con cadenas sin formato. Lo que he usado que funciona es:

${"\x0024{Hello}-\"My friend's friend\""} 

No he escapado del apóstrofo ya que utilicé comillas dobles.

0

puedo confirmar que el

${r"${item.id}"} 

es la forma correcta como un ejemplo.

Así que un poco llena ejemplo se verá como

<span><a href="/user/user-remove/${r"${item.id}"}"> Remove </a></span> 

y la salida será:

<span><a href="/user/user-remove/${item.id}"> Remove </a></span> 
Cuestiones relacionadas