2012-03-15 19 views
18

He estado comparando diferentes motores de plantilla de JavaScript para ver cuál me ofrece el mejor rendimiento para grandes conjuntos de datos. Uno que encontré es Underscore.js. Sin embargo, no he podido conseguir que ninguno de los ejemplos funcione. Mi plantilla se parece a:Uso de Underscore.js con ASP.NET

<% _.each(projects(), function(project) { %> 
    <tr> 
     <td><%= project.code %></td> 
     <td><%= project.request %></td> 
     <td><%= project.stage %></td> 
     <td><%= project.type %></td> 
     <td><%= project.launch %></td> 
    </tr> 
<% }) %> 

Sin embargo, cuando ejecuto la página me sale una excepción de ASP.NET en el servidor, ya que está tratando de compilar el texto dentro de las etiquetas <% ... %>:

Compiler Error Message: CS1026:) expected 
Line 826:      <% _.each(projects(), function(project) { %> 

I no pude encontrar una manera de escapar de estas etiquetas, ni pude encontrar una manera de configurar el subrayado para usar una sintaxis diferente. ¿Hay alguna solución, o son Underscore y ASP.NET simplemente incompatibles entre sí?

Respuesta

26

mismo problema con JSP, así que hacer esto:

_.templateSettings = {interpolate : /\{\{(.+?)\}\}/g,  // print value: {{ value_name }} 
         evaluate : /\{%([\s\S]+?)%\}/g, // excute code: {% code_to_execute %} 
         escape  : /\{%-([\s\S]+?)%\}/g}; // excape HTML: {%- <script> %} prints &lt;script&gt; 

Esto permitirá que pueda utilizar todas las diferentes versiones de las salidas de la etiqueta: la interpolación, evaluación y escapan.

+0

¡Gracias! Este código me ayudó mucho. Lo hice funcionar, pero por alguna razón hay un retraso de 10-15 segundos cuando la página se carga ahora. No estoy seguro de lo que está pasando, pero el enlace real no es mucho más rápido que jQuery.tmpl, así que probablemente regrese a usar eso. –

+0

Sí, no creo que sea tan rápido, pero dado que estamos usando Backbone para nuestro sitio y ya tenemos instalado Underscore, podríamos usarlo. Por supuesto, también tenemos jQuery ... – tkone

+0

Ah, el retraso se fue cuando copié localmente el archivo 'underscore-min.js', supongo que estaba en un servidor realmente lento. En realidad, parece ser un poco más rápido con conjuntos de datos más pequeños, y más o menos lo mismo para conjuntos de datos más grandes. Podría terminar manteniéndolo. –

5

<% son etiquetas utilizadas por asp.net. Entonces, cuando la página es analizada, intenta interpretarlas, pero asp.net no entiende la sintaxis, ya que espera el código C#, no javascript.

Puede cambiar los símbolos de interpolación en los templateSettings a algo así como { } y {{ }}

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

var template = _.template("Hello {{ name }}!"); 
template({name : "Mustache"}); 
=> "Hello Mustache!" 

Documentation


su información, estos son los ajustes por defecto:

// By default, Underscore uses ERB-style template delimiters, change the 
// following template settings to use alternative delimiters. 
_.templateSettings = { 
    evaluate : /<%([\s\S]+?)%>/g, 
    interpolate : /<%=([\s\S]+?)%>/g, 
    escape  : /<%-([\s\S]+?)%>/g 
}; 
+0

Eso solo soluciona uno de los conjuntos de etiquetas. – tkone

+0

Er dos de los conjuntos de etiquetas. – tkone

+0

¡Genial! Esto fue definitivamente útil. '+ 1' –

0

reemplazar:

<% }) %> 

cambio para:

<% }); %> 

buena suerte !!!

Cuestiones relacionadas