将车把 - 设备汇编为“本机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版本的方法不同(例如静态键入车把 - 图),编译器需要知道哪种类型您的车把板模板是指的。该信息通过特殊的模型传达给编译器。它的语法很简单:
例如:
这个令牌需要在每个车把模板的开头。
为了能够构建解决方案,需要遵循先决条件: