在本教程中,我们将研究Handlebars.java 库以简化模板管理。
让我们从添加*handlebars *依赖项开始:
Handlebars 模板可以是任何类型的文本文件。它由{{name}} 和 {{#each people}}等标签组成。
然后我们通过传递上下文对象(如Map或其他Object)来填充这些标签。
要将单个String 值传递给我们的模板,我们可以使用任何Object作为上下文。我们还必须在我们的模板中使用 {{this}} 标签。
然后 Handlebars 调用上下文对象的toString方法并用结果替换标签:
在上面的示例中,我们首先创建了一个Handlebars实例,这是我们的 API 入口点。
然后,我们给那个实例我们的模板。在这里,我们只是内联传递模板,但稍后我们会看到一些更强大的方法。
最后,我们为编译后的模板提供上下文。{{this}}将最终调用toString,这就是我们看到*“Hi Blogdemo!”*的原因。
我们刚刚看到了如何为我们的上下文发送一个String,现在让我们尝试一个Map:
与前面的示例类似,我们正在编译我们的模板,然后传递上下文对象,但这次是作为Map传递。
另外,请注意我们使用的是*{{name}}而不是{{this}}。这意味着我们的Map必须包含键name*。
我们还可以将自定义对象传递给我们的模板:
使用Person类,我们将获得与前面示例相同的结果:
我们模板中的*{{name}}将深入到我们的Person对象并获取name*字段的值。
到目前为止,我们已经使用了在代码中定义的模板。但是,这不是唯一的选择。我们还可以从文本文件中读取模板。
Handlebars.java 为从类路径、文件系统或 servlet 上下文中读取模板提供特殊支持。默认情况下,Handlebars 扫描类路径以加载给定的模板:
因此,因为我们调用了compile而不是compileInline,所以这是对 Handlebars在类路径上查找/greeting.hbs 的提示。
但是,我们也可以使用ClassPathTemplateLoader配置这些属性:
在这种情况下,我们告诉Handlebars在 classpath 中查找*/handlebars/greeting.html*。
最后,我们可以链接多个TemplateLoader实例:
所以,在这里,我们有两个加载程序,这意味着 Handlebars 将在两个目录中搜索*greeting *模板。
内置助手在编写模板时为我们提供了额外的功能。
with帮助程序更改当前上下文:
在我们的示例模板中,*{{#with address}}标记开始该部分,{{/with}}*标记结束它。
本质上,我们正在深入了解当前的上下文对象——比方说人——并将address设置为with部分的本地上下文。此后,此部分中的每个字段引用都将加上person.address。
因此,{{street}}标签将保存person.address.street的值:
我们正在编译我们的模板并将一个Person实例分配为上下文对象。请注意,Person类有一个Address字段。这是我们提供给with*助手的字段。
虽然我们进入了上下文对象的一个级别,但如果上下文对象有多个嵌套级别,则可以更深入地进行。
each迭代一个集合:
作为使用*{{#each friends}}和{{/each}}标签启动和关闭迭代部分的结果,Handlebars 将迭代上下文对象的friends*字段。
在示例中,我们将两个Person实例分配给上下文对象的friends字段。因此,Handlebars 在最终输出中将 HTML 部分重复两次。
最后,if提供条件渲染。
在我们的模板中,我们根据*busy *字段提供不同的消息。
编译模板后,我们设置上下文对象。由于busy字段为true,最终输出变为<h4>Blogdemo is busy.</h4>*。*
我们还可以创建自己的自定义助手。
Helper接口使我们能够创建模板。
作为第一步,我们必须提供Helper的实现:
正如我们所见,Helper接口只有一个方法接受context 和options对象。出于我们的目的,我们将输出Person的*name 和busy *字段。
创建助手后,我们还必须向 Handlebars 注册我们的自定义助手:
在我们的示例中,我们使用Handlebars.registerHelper()方法以isBusy的名称注册我们的助手。
作为最后一步,我们必须使用助手的名称在我们的模板中定义一个标签:
请注意,每个助手都有一个开始和结束标记。
当我们使用Helper接口时,我们只能创建一个 helper。相反,帮助器源类使我们能够定义多个模板帮助器。
此外,我们不需要实现任何特定的接口。我们只需在一个类中编写辅助方法,然后 HandleBars 使用反射提取辅助定义:
由于一个 helper 源可以包含多个 helper 实现,注册不同于单个 helper 注册:
我们正在使用*Handlebars.registerHelpers()*方法注册我们的助手。此外,辅助方法的名称成为辅助标记的名称。
Handlebars 库提供了多种方法来重用我们现有的模板。
模板包含是重用模板的方法之一。它有利于模板的组合。
这是*header *模板的内容——header.html。
为了在另一个模板中使用它,我们必须引用*header *模板。
我们有page 模板 - page.html - 其中包括使用{{>header}} 的页眉模板。
Handlebars.java 处理模板时,最终的输出也会包含header的内容:
作为组合的替代方案,Handlebars 提供了模板继承。
我们可以使用*{{#block}}和{{#partial}}*标签实现继承关系:
通过这样做,*messagebase *模板有两个块——*intro 和message *。
要应用继承,我们需要使用*{{#partial}}覆盖其他模板中的这些block *:
这是*simplemessage 模板。请注意,我们包含了messagebase 模板并覆盖了message *块。
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.bianchenghao6.com/java-jiao-cheng/17853.html