2011-03-10 33 views
38

林進入Backbone.js的構建JavaScript代碼爲我的項目,我愛HAML對後端(鐵軌)模板,所以我還想用它爲骨幹視圖模板。我知道有幾個HAML端口用於Javascript,如 https://github.com/creationix/haml-js,骨幹支持JST和小鬍子。最好的策略使用HAML模板與Backbone.js的

最好的方法是使用haml模板代替。

在客戶端使用HAML有什麼缺點嗎?性能方面,額外的腳本加載時間(按資產打包工具,如jammit照顧)

回答

26

我知道你已經提到過它,但我會建議在Jammit中使用haml-js。只需在您的javascript和assets.yml中添加haml.js,並添加template_function: Haml以及將您的模板文件包含到包中即可。例如

javascript_templates: 
    - app/views/**/*.jst.haml 

然後在你的觀點,你纔能有這個包(= include_javascripts :javascript_templates)和Jammit將到window.JST['file/path']包的任何.jst.haml文件。 (如果您查看網頁的源文件,你會看到類似<script src="/assets/javascript_templates.jst" type="text/javascript"></script> JavaScript文件)

要使用這些模板只需調用這些JSTs Jammit創建之一。即

$('div').html(JST['file/path']({ foo: 'Hello', bar: 'World' })); 

Jammit將使用Haml-js模板函數函數來呈現模板。

注:一定要指向Jammit的GitHub庫在你的Gemfile得到支持必要的HAML-JS工作換行符的最新版本。

+0

謝謝,我試了一下,並將其標記爲答案,如果它工作 – 2011-03-25 23:47:21

+0

[Jammit不支持換行符](https://github.com/documentcloud/jammit/issues/127)的問題已解決,應包括在內在下一個版本中。 – rubiii 2011-04-10 15:09:14

+0

是否有使用.jst文件的教程?我不會不自信地告訴你如何在打包後使用它們。我習慣做'$(「#template_name」).tmpl(data,helper)'。你如何獲得由jammit包裝的模板? – picardo 2011-04-10 18:35:26

-3

你可以嘗試用快遞玉(Haml的類模板)。 Express構建在Connect上,用於路由靜態文件。玉是我和Node.js的嘗試更快的模板引擎之一

http://expressjs.com/

+0

我的問題是關於HAML和Backbone的。 – 2011-03-10 02:03:27

+0

我認爲這篇文章回答你的問題http://fzysqr.com/2011/02/28/nodechat-js-using-node-js-backbone-js-socket-io-and-redis-to-make-a-實時聊天應用/ – 2011-03-10 02:06:58

+0

該頁面甚至沒有提到HAML,所以我不認爲它回答了這個問題。 – 2011-03-10 03:15:01

6

我知道這將一定程度上繞來繞去的問題,但在這裏我們去:)

我我的Rails應用程序我使用haml適用於後端的所有視圖。太棒了。由於某些原因(主要是i18n),我不喜歡在客戶端使用模板。這是我如何做到這一點:

  • 在ruby haml中創建所有模板,並將它們存儲到帶有時髦類型(我使用text/js-template)的腳本標記中。這將創建prerendered html,你可以使用jQuery和主幹來玩。
  • 當您創建骨幹觀點,加載存儲的模板並將它添加到您的文檔
  • 通過改變已有的模板

你只用HTML渲染處理您的視圖和jQuery是真棒爲。對於一些不需要i18​​n的視圖,我使用下劃線模板,因爲它已經在那裏。

至於HAML模板的表現,似乎鬍子和車把速度更快。

+1

我以前使用過這種策略,我會在我的html中隱藏的元素中存儲prerendered html模板,並將其克隆並填充數據,但它的醜陋而不是DRY代碼,因此我對模板感興趣。我喜歡小鬍子的無邏輯前提,但我喜歡HAML語法。我希望有一種方法可以在客戶端以某種方式使用它 – 2011-03-10 20:19:27

+0

您的AJAX模板不會像寫入部分一樣嗎? – rxgx 2011-03-16 03:34:57

1

我無法在Craig的主題上回答內聯(我在猜測我需要某種聲望來發布現有答案),但是您不再需要抓住一堆jammit來使用haml-js--承諾成爲jammit的主要分支。看到這裏的詳細信息:https://github.com/documentcloud/jammit/commit/b52e429f99cac3cd1aa2bf3ab95f1bfaf478d50d

編輯:最後的寶石版本是在1月,並提交在3月添加,所以你需要設置捆綁器運行對github回購或在本地建立它。如果你沒有使用頭文件,你將無法正確解析模板,因爲換行符被刪除。

所有我需要做的設置此是:

1)以下內容添加到我的 「assets.yml」 文件:

template_function: 「Haml的」

2)添加引入haml-JS源和模板,我想加載到我的資產文件: 的JavaScript: 核心: - 大衆/ Java腳本/供應商/ haml.js 模板: - 應用程序/視圖/事件/ _form.haml.jst

3)確保我加載核心和模板在我application.html.erb

<%=使用include_javascripts:核心:模板%>

通過JST在我的源文件

4)訪問模板[文件名](即,在這種情況下JST ['_ form'])。值得一提的一個問題 - jammit會查看所有的模板並將它們命名爲共享路徑,所以如果你有app/views/foo/file.jst和app/views/bar/file.jst,你可以訪問與JST ['foo/file.jst']和JST ['bar/file.jst']。如果你有app/views/foo/file1.jst和app/views/foo/file2.jst,他們會直接在JST ['file1.jst']和JST ['file2.jst'] - 這是當你開始使用前幾個模板時,容易忘記。

一切都很好。我不確定爲什麼Craig需要定義一個函數 - 我只使用了haml.js提供的默認Haml函數,但也許我錯過了一些東西。

+0

這很瞭解。我認爲我見過你在YC討論骨幹(我真的瞭解它) – 2011-04-06 21:19:36

+0

感謝您的闡述。我更新了我原來的帖子。我最初創建了一個函數,因爲我遵循使用Mustache模板的jammit幫助。沒有意識到我可以直接打電話給Haml :-P – Craig 2011-04-22 16:48:08

14

我即將給haml-coffee一槍。 (沒有雙關的意圖)我不能唱讚美咖啡的足夠;再加上它現在在Rails 3.1中是默認的。現在我可以在我最喜歡的模板語言中嵌入咖啡腳本,並預先編譯這些內容。

哦,現在讓它開始工作吧。

+2

我最近給了[haml-coffee](https://github.com/9elements/haml-coffee)很多愛,並且完全符合HAML標準。另外,我創建了[haml_coffee_assets](https://github.com/netzpirat/haml_coffee_assets),以便在Rails 3.1資產管道中使用haml-coffee模板。 – Netzpirat 2011-11-25 16:27:48

+3

現在,這比「官方」的答案要好得多,看看它是如何與資產管道一起使用的(就我所能分辨的那樣)。我只是一直在玩它,但到目前爲止,這看起來正是我所需要的。與Backbone,Haml,Coffeescript,資產管道暢玩。愛它! – nzifnab 2012-03-22 20:30:28

+0

haml_coffee_assets三聲歡呼! – Duke 2012-04-19 08:28:53

2

我一直在研究Rails 3/Backbone應用程序,並在評估hamlbars,haml_assets和玩haml-js後採取了不同的方法。

這些都是爲問題提供解決方案的固體寶石,每個寶石都有一定的權衡。例如,Haml-js需要渲染模板客戶端(這沒什麼不妥,只是一個折衷)。 Hamlbars和haml_assets都插入到資產管道中,但因爲它們存在於請求對象之外,所以一些幫助器將不起作用。兩者都對此進行了一些調整,幷包含url助手和ActionView助手,但不要指望具有與在視圖中編寫haml相同的功能。

我的方法有點笨重(我打算把它放到引擎中),但它運行良好且易於複製。它採用haml_assets可能的情況下,卻倒在從一個「模板」控制器服務模板與「秀」行動

  • 把你的意見在視圖/模板/目錄
  • 您可以添加一個佈局呈現這種觀點爲JST功能
  • 您可以編寫模板
  • 您可以添加腳本標籤爲「時指定節目行動回報「應用程序/ JavaScript的」爲內容類型
  • 您可以訪問所有的助手/模板/無論「將呈現任何模板,或使用路線通過更好的有組織的意見。

這種方法的好處是,因爲您的視圖可以從控制器訪問,所以您可以選擇將它們呈現爲jst模板(通過模板控制器)或通過其他控制器呈現爲部分。這將允許你直接從網址(比如/ products/widgets/super-cool-widget)爲用戶提供seo-friendly頁面,用戶可以獲得緩存的模板/模板/小部件/超酷小部件。

+0

請問您能解釋您是如何獲得所有幫助者的? – theotheo 2012-10-06 19:11:50