开发学院

您的位置:首页>教程>正文

教程正文

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