將車把 - 設備彙編為“本機C#代碼”,用於表演者和類型安全的Serverside HTML渲染。
該編譯器是Jakob Demler的學士學位論文的結果,該論文涵蓋了方法,設計決策,實施細節及其評估,可以在此處找到
該項目目前處於Beta階段。
與Handlebars.js存儲庫中的微學計算進行了比較:https://github.com/wycats/handlebars.js/tree/master/master/bench
| 微實驗 | 車把 | 彙編的手欄 | 加速 |
|---|---|---|---|
| Arrayeach | 391 OPS/MS | 3039 OPS/MS | 7.77 |
| 複雜的 | 120 OPS/MS | 1180 OPS/MS | 9.83 |
| 數據 | 295 OPS/MS | 1333 OPS/MS | 4.51 |
| depth1 | 228 OPS/MS | 3693 OPS/MS | 16.20 |
| depth2 | 63 OPS/MS | 1515 OPS/MS | 24.04 |
| 部分回歸 | 125 OPS/MS | 1895 OPS/MS | 15.16 |
| 部分的 | 211 OPS/MS | 905 OPS/MS | 4.29 |
| 路徑 | 2060 OPS/MS | 4646 OPS/MS | 2.25 |
| 細繩 | 5563 OPS/MS | 13964 OPS/MS | 2.51 |
| 變量 | 1991 OPS/MS | 4027 OPS/MS | 2.02 |
只需從定制項目中安裝VSIX軟件包,然後重新啟動Visual Studio。將新的車把模板添加到您的解決方案(以.hbs結尾),然後將“ HandleBarsCompiler”添加到文件的定制屬性中。每次保存車把模板時,都會調用編譯器,並創建一個包含生成代碼的{templateName} .hbs.cs文件。
每個車把設備都需要一種渲染的類型。作為一個名為“人格模型”的班級將服務:
namespace ViewModels
{
public class PersonModel
{
public string FirstName { get ; set ; }
public string LastName { get ; set ; }
public int Age { get ; set ; }
public List < string > EMailAddresses { get ; set ; }
}
}現在,我們必須將類型傳達給HandlebarsCompiler。在每個車把設備的開頭,需要有一個sop飾的模型圖:
對於我們的示例,將是:
請注意,ModelToken內部的類型也可以是傳遞給模板的實際ViewModel的基類或接口。
其餘的車把設備遵循標準的車把語法和語義。這是一個完整的示例:
不需要註冊部分。只需確保在使用該部分的車把之前編譯部分即可。對於其他所有標準車把的應用程序邏輯適用。
編譯的Handlebars允許使用輔助功能。這些必須是靜態的,返回字符串並通過屬性註釋。如果參數在編譯時匹配,則可以檢查它們,因此可以過載。除此之外,它們沒有限制,可以在代碼庫中的任何地方放置。
[ CompiledHandlebarsHelperMethod ]
pulic static string FullName ( PersonModel model )
{
return string . Concat ( model . FirstName , " " , model . LastName ) ;
} 編譯的Handlebars提供了有關佈局的不同功能:任何Handlabarstemplate都可以在車把內呈現。由於特殊{{body}}令牌,車把與正常的車把板不同:
要在該佈局中渲染一個車把 - 板,請在{{{model}} token之後立即使用{{layout}}令牌:
該模板的結果等於以下模板:
由於使用handlebars.js版本的方法不同(例如靜態鍵入車把 - 圖),編譯器需要知道哪種類型您的車把板模板是指的。該信息通過特殊的模型傳達給編譯器。它的語法很簡單:
例如:
這個令牌需要在每個車把模板的開頭。
為了能夠構建解決方案,需要遵循先決條件: