傾斜是在一堆不同的紅寶石模板發動機上的薄界面,以使其用法盡可能通用。這對於支持多個模板引擎但不想單獨編碼的Web框架,靜態站點生成器和其他系統很有用。
所有模板引擎都支持以下功能(假設該功能與引擎相關):
主要目標是獲取上面列出的所有內容,以適用於發行版中包含的所有模板引擎。
包裝中包含對這些模板引擎的支持:
引擎 | 文件擴展 | 所需的庫 | 維護者 |
---|---|---|---|
Asciidoctor | .ad,.adoc,.Asciidoc | asciidoctor(> = 0.1.0) | 社區 |
ERB | .erb,.rhtml | 沒有(包括Ruby Stdlib) | 傾斜團隊 |
插值 | .str | 沒有(包括Ruby Core) | 傾斜團隊 |
Erubi | .erb,.rhtml,.erubi | Erubi | 社區 |
Erubis | .erb,.rhtml,.erubis | Erubis | 傾斜團隊 |
哈姆爾 | .haml | 哈姆爾 | 傾斜團隊 |
Sass | .sass | sass-embedded(> = 1.0)或sassc(> = 2.0) | 傾斜團隊 |
SCSS | .scss | sass-embedded(> = 1.0)或sassc(> = 2.0) | 傾斜團隊 |
建築商 | .builder | 建築商 | 傾斜團隊 |
液體 | 。液體 | 液體 | 社區 |
rdiscount | .markdown,.mkd,.md | rdiscount | 社區 |
redcarpet | .markdown,.mkd,.md | redcarpet | 社區 |
Kramdown | .markdown,.mkd,.md | Kramdown | 社區 |
潘多克 | .markdown,.mkd,.md | 潘多克 | 社區 |
重組文本 | .rst | 潘多克 | 社區 |
Maruku | .markdown,.mkd,.md | Maruku | 社區 |
CommonMarker | .markdown,.mkd,.md | CommonMarker | 社區 |
紅色布羅斯 | 。紡織品 | 紅色布羅斯 | 社區 |
RDOC | .rdoc | RDOC | 傾斜團隊 |
半徑 | 。半徑 | 半徑 | 社區 |
馬克比 | .mab | 馬克比 | 傾斜團隊 |
諾科吉里 | .nokogiri | 諾科吉里 | 社區 |
咖啡本 | 。咖啡 | 咖啡錄(+ JavaScript) | 傾斜團隊 |
咖啡本(識字) | .litcoffee | 咖啡錄(> = 1.5.0)(+ javaScript) | 傾斜團隊 |
生活記錄 | .ls | Livesscript(+ JavaScript) | 傾斜團隊 |
打字稿 | .ts | 打字稿(+ JavaScript) | 傾斜團隊 |
克里奧爾(Wiki Markup) | .wiki,.creole | 克里奧爾 | 社區 |
Wikicloth(Wiki Markup) | .Wiki,.Mediawiki,.mw | Wikicloth | 社區 |
yajl | .yajl | Yajl-Ruby | 社區 |
CSV | .rcsv | 沒有(包括Ruby Stdlib) | 傾斜團隊 |
蝦 | 。蝦 | 蝦(> = 2.0.0) | 社區 |
別貝 | .es6,.babel,.jsx | babel-transpiler | 傾斜團隊 |
蛋白石 | .rb | 蛋白石 | 社區 |
每個受支持的模板引擎都有一個維護器。請注意,這是傾斜集成的維護者,而不是模板引擎本身的維護者。維護者負責提供足夠的集成並在傾斜版本中保持向後兼容性。社區維護了一些集成,該集成按以下方式處理:
這些模板發動機以其自己的傾斜整合發貨:
引擎 | 文件擴展 | 所需的庫 |
---|---|---|
苗條的 | 。苗條的 | Slim(> = 0.7) |
嵌入式JavaScript | 鏈輪 | |
嵌入式咖啡本 | 鏈輪 | |
JST | 鏈輪 | |
組織模式 | .org | org-ruby(> = 0.6.2) |
emacs org | .org | tilt-emacs_org |
車把 | .hbs,車把 | 傾斜手柄 |
jbuilder | .jbuilder | 傾斜式 |
有關模板引擎選項和支持功能的詳細信息,請參見模板.md。
即時滿足:
require 'erb'
require 'tilt'
template = Tilt . new ( 'templates/foo.erb' )
=> #<Tilt::ERBTemplate @file="templates/foo.erb" ...>
output = template . render
=> "Hello world!"
建議在加載時間明確要求呼叫程序明確要求模板引擎庫(如上所述)。傾斜的嘗試懶惰要求模板引擎庫首次創建模板,但這很容易在螺紋環境中出錯。
{tilt}模塊包含所有受支持的模板引擎的通用實現類。每個模板類都遵循相同的接口進行創建和渲染。在即時的滿足示例中,我們讓傾斜基於文件名確定模板實現類,但是{tilt :: template}實現也可以直接使用:
require 'tilt/haml'
template = Tilt :: HamlTemplate . new ( 'templates/foo.haml' )
output = template . render
render
方法採用可選的評估範圍和當地人的哈希參數。在這裡,模板是在Person
對象的上下文中評估模板的x
和y
:
require 'tilt/erb'
template = Tilt :: ERBTemplate . new ( 'templates/foo.erb' )
joe = Person . find ( 'joe' )
output = template . render ( joe , :x => 35 , :y => 42 )
如果沒有提供範圍,則在用Object.new
創建的對象的上下文中評估模板。
單個Template
實例的render
方法可以多次稱為具有不同範圍和當地人參數。繼續上一個示例,我們渲染了相同的編譯模板,但是這次是在簡的範圍中:
jane = Person . find ( 'jane' )
output = template . render ( jane , :x => 22 , :y => nil )
可以傳遞塊以render
支持運行任意紅寶石代碼的模板(通常具有某種形式的yield
)。例如,在foo.erb
中假設以下內容:
Hey <%= yield %>!
傳遞給render
塊以產量為yield
:
template = Tilt :: ERBTemplate . new ( 'foo.erb' )
template . render { 'Joe' }
# => "Hey Joe!"
{tilt :: mapping}類包括用於將模板實現類與文件名模式關聯的方法,並根據這些關聯定位/實例化模板類。
{tilt}模塊具有一個全局映射實例,該Mapping
由上面的模板引擎表填充。
{tilt.register}方法將文件名模式與特定模板實現相關聯。將ERB用於以.bar
擴展為結尾的文件:
>> Tilt . register Tilt :: ERBTemplate , 'bar'
>> Tilt . new ( 'views/foo.bar' )
=> #<Tilt::ERBTemplate @file="views/foo.bar" ...>
檢索文件或文件擴展名的模板類:
>> Tilt [ 'foo.bar' ]
=> Tilt :: ERBTemplate
>> Tilt [ 'haml' ]
=> Tilt :: HamlTemplate
檢索文件的模板類列表:
>> Tilt . templates_for ( 'foo.bar' )
=> [ Tilt :: ERBTemplate ]
>> Tilt . templates_for ( 'foo.haml.bar' )
=> [ Tilt :: ERBTemplate , Tilt :: HamlTemplate ]
模板類是通過搜索一系列降低特定名稱模式來確定的。使用Tilt.new('views/foo.html.erb')
時,我們檢查以下模板映射:
views/foo.html.erb
foo.html.erb
html.erb
erb
傾斜需要知道模板的編碼以正常工作:
傾斜將在讀取外部文件時使用Encoding.default_external
作為編碼。如果您主要使用一個編碼(例如UTF-8),我們強烈建議您設置此選項。在提供自定義讀取器塊( Tilt.new { custom_string }
)時,您將確保自己正確編碼字符串。
傾斜中的大多數模板發動機還允許您使用:default_encoding
-option:
tmpl = Tilt . new ( 'hello.erb' , :default_encoding => 'Big5' )
最終,它取決於模板引擎如何處理編碼:它可能尊重:default_encoding
,它可能始終假定它是UTF-8(例如Coffeescript),或者可以進行自己的編碼檢測。
傾斜編譯由模板引擎生成的Ruby源代碼,並在隨後的模板調用中重複使用。基準表明,與評估每個調用的Ruby源相比,這會產生5倍10倍的性能。
目前,這些模板引擎支持模板編譯:StringTemplate,Erb,Erubis,Erubi,Haml,Nokogiri,Builder和Yajl。
傾斜是版權(C)2010 Ryan Tomayko,並根據MIT許可發行。有關更多信息,請參見COPYING
文件。