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样式表,既可以作为原型,也可以作为工作模板。