2011-03-05 51 views
21

我正在嘗試將Freemarker與jQuery模板結合使用。

兩個框架使用美元符號/大括號來識別替換表達式(或作爲它們被稱爲在freemarker中,「內插」),例如${person.name}

所以,當我定義一個jQuery模板與該語法表達式,Freemarker的試圖解釋他們(失敗)。

我試圖逃避${序列通過了Freemarker通過它無濟於事的各種組合 - \${\$\{$\{

在美元和捲髮之間插入一個FreeMarker的註釋(如$<#-- -->{expression} )工作 - 但我正在尋找更簡潔優雅的解決方案。

有沒有一種更簡單的方式來獲得一個Freemarker模板來輸出的字符序列${

回答

38

這應該打印$ {} person.name:

${r"${person.name}"} 
1

你嘗試$$

我從Freemarker手冊中發現${r"${person.name}"}將會打印出${person.name}而不會嘗試渲染它。

也許你也應該看看Freemarker escaping freemarker

3

如果${是你唯一的問題,那麼你可以使用的替代語法jQuery的模板插件像這樣:{{= person.name}}

也許有點清潔比逃避它。

+0

絕對乾淨。謝謝你的提示! – 2011-03-06 03:20:38

4

另一種選擇是使用與解析= false選項的#include。也就是說,把你的jQuery模板放入獨立的包含頁面並使用parse = false,這樣freemarker就不會嘗試解析它。

當模板較大且包含雙引號時,這將是一個不錯的選擇。

15

此外,如果您有更長的部分沒有FreeMarker標記,則可以使用<#noparse>...</#noparse>

如果你有這個問題有很多,您還可以實現TemplateLoader只是調用另一個TemplateLoader,但隨後在返回的文本(這是tempalte源代碼,而不是它的輸出),它取代所有@{...} -s與${...}和所有${...} -s與${'$'}{...}。因此,您可以使用@{...}進行FreeMarker插值。這比聽起來有點棘手,因爲要100%正確,你必須檢測特殊標記何時出現在字符串內部,在這種情況下,你不應該替換它們。編輯器和IDE插件也不會很好地播放。

0

在當你想使用非原始字符串,這樣就可以逃脫雙引號,頓號,等等,你可以做以下的情況:

試想一下,你想使用字符串$ {你好} - 「我的朋友的朋友」在一個字符串裏面。你不能用原始字符串來做到這一點。我所使用的工作原理是:

${"\x0024{Hello}-\"My friend's friend\""} 

我也沒能逃脫撇號,因爲我用雙引號。

0

我可以證實,

${r"${item.id}"} 

是正確的方法作爲一個例子。

所以我還挺完整的例子看起來像

<span><a href="/user/user-remove/${r"${item.id}"}"> Remove </a></span> 

和輸出將是:

<span><a href="/user/user-remove/${item.id}"> Remove </a></span>