2011-07-26 57 views
10

我希望能夠定義一次模板,並使用它們從服務器端以及客戶端都呈現html。 (DRY原理和所有這些)使用java編譯器的客戶端模板語言(DRY模板)

我想象的API僅僅是這個:render(JSON,template) - > html。我正在使用一個java框架(實際上玩framwork,但我不認爲這是框架特定的)。

我讀過很多類似的問題,最新的,最有幫助的是:Templating language for both client-side and server-side rendering

我非常同意作者這樣的明顯競爭者:Mustache和Google Closure Templates不會削減它。 (原因見該職位)

要求:

  • 必須:客戶端呈現
  • MUST:的模板文件,客戶端緩存
  • NICE:客戶端「編譯一次執行模板文件的多次以快速的JavaScript代碼
  • 必須:服務器端渲染
  • NICE:本地Java實現

我見過一堆帖子提示使用Node.js進行服務器端模板化。雖然這肯定會起作用(下劃線模板,Handlebarsjs,EJS都會工作得很好)我很努力地看到如何溝通/組合/整合Node.js與Java,畢竟它仍然是需要輸出JSON的Java框架

我見過文章提到JVM和node.js之間的一些概念驗證(通過http或使用JNDI)。然而,目前似乎沒有圖書館,更不用說經過戰鬥考驗了。因此,爲了整理,你會建議哪些客戶端模板引擎可以在java中運行(或者可以通過jvm調用一些箍環)?如果這個'箍'碰巧是Node.js,你會建議使用什麼樣的通信/庫?

+0

爲什麼不使用node.js而不是Play?有很多SSJS系統在JVM上運行,如Rhino和ringojs – Raynos

+0

因爲我來自java背景,我正在處理現有的應用程序。我只是想重構演示文稿的一部分。關於ringojs,我已經研究過它,但Node.js似乎比ringojs更好(從我讀過的)。也許我不應該擔心,當替代方法是通過http連接到Node.js,因爲網絡延遲,但這是我試圖找出的一件事情。 –

+0

你確定你需要服務器端渲染嗎?我猜測,在服務器上應用模板之後,除了吐出來的響應之外,您不會對其他任何內容做任何其他處理... 另一方面,您可以在JVM中運行JavaScript模板語言使用JavaScript-2-JVM運行時。在Java端生成JSON代碼,將它傳遞給JS端並收集輸出。我只在.NET上使用JScript.NET進行了動態編譯,但您也應該能夠以類似的方式在Java中使用它。 – miguelv

回答

1

我現在正在爲鬍子,並期待Handlebars.js的Java實現。 一旦存在,重構路徑就不應該那麼陡峭。

編輯 - 2012年4月

好吧,更新此以供將來參考:

  • 我外包服務器端模板到Node.js的
  • 使用套接字實現的java和node.js之間的通信。 (見:Sending data from node.js to Java using sockets爲我的想法)
  • 由於現在我只需要一個客戶端庫(或更好的一個在客戶端和服務器端使用節點在javascript中運行)我可以更自由地選擇。已經變得習慣了小鬍子,我所選擇的侯根解析器(由微博人)(http://twitter.github.com/hogan.js/

100%DRY(即使客戶機側的混入和I18N-束來自相同的源。 而且,霍根可以預編譯模板服務器端和打開到客戶端的連接,以便客戶端不必解析模板上了第一連接。

是不是快?閃電...

+0

你的解決方案聽起來很有趣。我在這裏看到你的服務器端必須運行nodejs。 – oak