2017-05-11 88 views
2

freemaker的模板呈現以下語法變量:$ {名}使用freemarker中使用JavaScript ES6模板字符串

的Javascript ES6模板字符串有類似的語法$ {名}

的問題是,當FreeMarker的運行在服務器上,它會嘗試渲染JavaScript代碼中的模板,因爲Freemarker認爲它遇到了一個變量(實際上它是一個應該在客戶端上呈現的JavaScript模板)。如何處理這個問題的建議?

一種方式是包裝所有的JS在freemarker的評論(所以它永遠不會計算),

或把JS代碼在seprate文件(在HTML頁面中沒有內聯),因此這是從來沒有由freemarker評估。

回答

1

不幸的是,FreeMarker的語法不可配置(我認爲也不是ES6模板語法)。因爲這將是真正的解決方案,因此將其配置爲使用其他內容而不是$。您可以使用自定義TemplateLoader實現創建一個窮人的實現,該實現只是委託給另一個TemplateLoader,不同之處在於它爲它返回的Reader添加了一個過濾器,並用它修改了模板。它將用$<#-- -->{@{ -s替換${-s,用${替換。那麼你的原始模板可以是類似${forES6} @{forFM}。這有很多缺點,就像FreeMarker錯誤位置中的列號會被移除,Eclipse插件和其他工具不起作用。

1

您可以在noparse標籤

<#noparse>...</#noparse> 

使用JavaScript的
const name = "WORLD"; 
Hello ${r"${name}"} 

HTML視圖的 「Hello $ {name}的」 輸出 - >世界,你好

相關問題