2012-03-15 116 views
18

我一直在比較不同的JavaScript模板引擎,以查看哪一個能夠爲大型數據集提供最佳性能。我遇到的一個是Underscore.js。但是,我還沒有能夠得到任何例子的工作。我的模板的樣子:在ASP.NET中使用Underscore.js

<% _.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> 
<% }) %> 

然而,當我運行該頁面我得到了一個服務器端的ASP.NET例外,因爲它試圖編譯<% ... %>標籤內的文本:

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

我無法找到逃避這些標籤的方法,也沒有找到一種方法來配置Underscore以使用不同的語法。有沒有解決方法,或者是Underscore和ASP.NET只是互相不兼容?

回答

26

同樣的問題與JSP,所以我們這樣做:

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

這將允許您使用標籤輸出的所有各種版本:插值,評價和逃避。

+0

謝謝!這段代碼幫了我很大的忙。我知道它的工作原理,但由於某種原因,現在頁面加載時會有10-15秒的延遲。不知道發生了什麼,但實際的綁定並沒有比jQuery.tmpl,所以我可能會回去使用它。 – 2012-03-15 18:04:51

+0

是的,我不認爲這麼快,但是因爲我們爲我們的網站使用Backbone並且已經安裝了Underscore,所以最好使用它。當然我們也有jQuery ... – tkone 2012-03-15 18:06:07

+0

啊,當我在本地複製'underscore-min.js'文件時,延遲就消失了,你猜這是在一個非常慢的服務器上。實際上,對於較小的數據集似乎更快一些,對於較大的數據集大致相同。我最終可能會保留它。 – 2012-03-15 18:37:03

5

<%是asp.net使用的標籤。所以當頁面被解析時,它會試圖解釋這些,但asp.net不理解語法,因爲它期望C#代碼,而不是JavaScript。

您可以更改templateSettings插值符號像{ }{{ }}

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

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

Documentation


僅供參考,這些都是默認設置:

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

只修復其中一個標記集。 – tkone 2012-03-15 17:37:11

+0

呃兩個標籤集。 – tkone 2012-03-15 17:38:37

+0

太棒了!這絕對有幫助。 '+ 1' – 2012-03-15 18:05:16

0

取代:

<% }) %> 

變化爲:

<% }); %> 

好運!