2011-09-22 12 views
22

Estaba tratando de usar plantillas de underscore.js para plantillas en una aplicación de rieles 2.3 que no tiene ni tienen jammit como un empaquetador de activos.Rieles con plantillas Underscore.js

Aquí es la plantilla sencilla:

<script type="text/template" id="q-template"> 
    <div class="current-body"> 
     <span class="q-index"><%= title %></span> 
     <span class-"q-text"><%= body %></span> 
    </div> 
</script> 

Carriles intenta analizar estas variables como erb y se emite una ArgumentError. ¿Cómo puedo obtener plantillas de subrayado para jugar muy bien con los rieles en este caso? ¿Dónde estoy equivocado?

Respuesta

52

Utilice algunos otros delimitadores en lugar de <%= %>. Por ejemplo, para utilizar los soportes de estilo bigote {{= }} (interpolados) y {{ }} (evaluar), añadir este lugar para su javascript:

_.templateSettings = { 
    interpolate: /\{\{\=(.+?)\}\}/g, 
    evaluate: /\{\{(.+?)\}\}/g 
}; 
+0

Gracias, esto funciona. Estaba revisando la documentación de _.template y _.templateSettings fue mencionada allí, pero de alguna manera se me pasó por alto cuando estaba configurando el proyecto, y seguí pensando que esto podría estar relacionado con jammit. – papdel

+3

Gracias FYI: http://documentcloud.github.com/underscore/#template y http://stackoverflow.com/questions/5771742/underscore-js-templates-within-jsp – Francois

+6

Usando '{{}}' y ' {{=}} 'puede causar problemas si quieres usar bloques de estilo' if (x) {} 'en tus plantillas. Probablemente sea más fácil en ese caso usar '[%%]' y '[% =%]' en su lugar: –

25

Si no desea cambiar la configuración de la plantilla a través de todo su proyecto .. .

Escapar de la ERB tags: <%= convierte <%%=

<script type="text/template" id="q-template"> 
    <div class="current-body"> 
     <span class="q-index"><%%= title %></span> 
     <span class-"q-text"><%%= body %></span> 
    </div> 
</script> 

Tenga en cuenta que la etiqueta de cierre es STI ll %>, no %%>.


Nota al margen - También intenté hacer la salida utilizando un heredoc. El siguiente código se ejecuta con éxito, pero genera un montón de código fuente erb que queda atrapado entre los comandos heredoc.

<script type="text/template" id="q-template"> 
<%= <<-heredoc %> 
    <div class="current-body"> 
     <span class="q-index"><%%= title %></span> 
     <span class-"q-text"><%%= body %></span> 
    </div> 
heredoc 
</script> 
Cuestiones relacionadas