2012-03-15 15 views
18

Ho confrontato diversi motori di template JavaScript per vedere quale mi offre le migliori prestazioni per grandi serie di dati. Uno che ho incontrato è Underscore.js. Tuttavia, non sono stato in grado di far funzionare nessuno degli esempi. Il mio modello si presenta come:Utilizzo di 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> 
<% }) %> 

Tuttavia, quando corro pagina ottengo un'eccezione ASP.NET lato server, come si sta cercando di compilare il testo all'interno delle <% ... %> tag:

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

I non è stato in grado di trovare un modo per evitare questi tag, né sono stato in grado di trovare un modo per configurare Underscore per utilizzare una sintassi diversa. C'è una soluzione alternativa o Underscore e ASP.NET semplicemente incompatibili tra loro?

risposta

26

stesso problema con JSP, quindi facciamo questo:

_.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; 

Questo vi permetterà di utilizzare tutte le varie versioni delle uscite tag: interpolazione, di valutazione e di fuga.

+0

Grazie! Questo codice mi ha aiutato molto .. L'ho fatto funzionare, ma per qualche motivo c'è un ritardo di 10-15 secondi quando la pagina si carica ora. Non sono sicuro di cosa sta succedendo, ma il binding effettivo non è davvero molto più veloce di jQuery.tmpl, quindi probabilmente tornerò a usarlo. –

+0

Sì, non penso sia così veloce, ma dal momento che stiamo usando Backbone per il nostro sito e abbiamo già installato Underscore, potrebbe anche usarlo. Naturalmente abbiamo anche jQuery ... – tkone

+0

Ah, il ritardo è scomparso quando ho copiato localmente il file 'underscore-min.js', suppongo che fosse su un server veramente lento. In realtà sembra essere un po 'più veloce con insiemi di dati più piccoli e circa lo stesso per dataset più grandi. Potrei finire per tenerlo. –

5

<% sono tag utilizzati da asp.net. Quindi, quando la pagina viene analizzata, cerca di interpretare quelli ma asp.net non capisce la sintassi in quanto si aspetta il codice C#, non javascript.

È possibile modificare i simboli di interpolazione nelle templateSettings a qualcosa come { } e {{ }}

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

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

Documentation


FYI, queste sono le impostazioni di default:

// 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

Questo corregge solo uno dei set di tag. – tkone

+0

Er due dei set di tag. – tkone

+0

Ottimo! Questo è stato sicuramente utile. '+ 1' –

0

sostituire:

<% }) %> 

Cambia

<% }); %> 

buona fortuna !!!

Problemi correlati