Thymeleaf 3.0教程:13 文本模板模式(二)
13.2 扩展性
这种语法的优点之一是它和标记语法一样可扩展。开发人员仍然可以用自定义元素和属性定义自己的方言,对它们应用前缀(可选),然后在文本模板模式中使用它们:
[#myorg:dosomething myorg:importantattr="211"]some text[/myorg:dosomething]
13.3 文本原型注释块:添加代码
JAVASCRIPT和CSS模板模式(不适用于文本)允许在特殊注释语法 /*[+...+]*/ 以便Thymeleaf在处理模板时自动取消对这些代码的注释:
var x = 23; /*[+ var msg = "This is a working application"; +]*/ var f = function() { ...
执行后的结果:
var x = 23; var msg = "This is a working application"; var f = function() { ...
您可以在这些注释中包含表达式,并将对它们进行评估:
var x = 23; /*[+ var msg = "Hello, " + [[${session.user.name}]]; +]*/ var f = function() { ...
13.4 文本解析器级注释块:删除代码
以类似于纯原型注释块的方式,所有三种文本模板模式(TEXT、JAVASCRIPT和CSS)都可以指示Thymeleaf删除特殊/*[- */ 和 /* -]*/ 标记之间的代码,如下所示:
var x = 23; /*[- */ var msg = "This is shown only when executed statically!"; /* -]*/ var f = function() { ...
或者这样,在文本模式下:
... /*[- Note the user is obtained from the session, which must exist -]*/ Welcome [(${session.user.name})]! ...
13.5 自然JavaScript和CSS模板
如前一章所见,JavaScript和CSS内联提供了在JavaScript/CSS注释中包含内联表达式的可能性,例如:
... var username = /*[[${session.user.name}]]*/ "Sebastian Lychee"; ...
这个是有效的JavaScript,一旦被执行,可能看起来像:
... var username = "John Apricot"; ...
事实上,将内联表达式包含在注释中的相同技巧可以用于整个文本模式语法:
/*[# th:if="${user.admin}"]*/ alert('Welcome admin'); /*[/]*/
当模板静态打开时(因为它是100%有效的JavaScript),以及当模板运行时(如果用户是管理员),将显示上面代码中的警告。这相当于:
[# th:if="${user.admin}"] alert('Welcome admin'); [/]
实际上是在模板解析过程中初始版本被转换成的代码。
但是注意,注释中的包装元素不会清理它们所在的行(右边直到;如内联输出表达式一样。这种行为只保留给内联输出表达式。
因此Thymeleaf3.0允许以自然模板的形式开发复杂的JavaScript脚本和CSS样式表,既可以作为原型,也可以作为工作模板。