1

我想要做這樣的事情:如何用下劃線評估下劃線中的JavaScript函數?

<script id="tmpl-books" type="text/template"> 
    <ul> 
    <% for (var i = 0; i < books.length; i++) { %> 
     <% var book = books[i]; %> 
     <li> 
     <em><%= book.title %></em> by <%= book.author %> 
     </li> 
    <% } %> 
    </ul> 
</script> 
在我的代碼

,但我使用JSP,所以我必須使用{{}}符號,但是當我做這個{{爲(VAR .. }}不起作用

<script id="tmpl-books" type="text/template"> 
     <ul> 
     {{ for (var i = 0; i < books.length; i++) { }} 
      <% var book = books[i]; %> 
      <li> 
      <em>{{= book.title }}</em> by {{ book.author }} 
      </li> 
     {{ } }} 
     </ul> 
    </script> 

我怎樣才能做到這一點

+0

你的'_.templateSettings'看起來像什麼? –

+0

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

回答

4

下劃線模板有three distinct regexes:?

定義一個插值正則表達式來匹配應該逐字插值表達式,一個逃逸正則表達式來匹配應該是HTML轉義後插入表達式和一個評估正則表達式來匹配應在不插入被評估成表達式結果字符串。

如果你想使用手把十歲上下分隔符,你要確定所有三個而不是僅僅interpolate正則表達式:

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

還要注意的是,interpolateescape正則表達式必須匹配的東西, evaluate將不會由於the order that the regexes are applied in

有了這些模板設置,這樣的一個模板:

<script id="tmpl-books" type="text/template"> 
    <ul> 
     {{ for (var i = 0; i < books.length; i++) { }} 
      {{ var book = books[i]; }} 
      <li> 
       <em>{{= book.title }}</em> by {{= book.author }} 
      </li> 
     {{ } }} 
    </ul> 
</script> 

應該工作。請注意,從{{ book.author }}{{= book.author }}的變化,因爲您正在插入book.author,而不是對其進行評估。

+0

會是{{var book = books [i]}},因爲<%將會調用jsp。 – PixMach

+0

也謝謝。這讓我感到困惑。 – PixMach

+0

對不起,錯過'var',現在修好了。 –