设置变量
除了从控制器方法传递变量值给视图,还支持直接在视图中定义变量并赋值使用。
下面设置的变量设置方法都是不需要声明类型的。
1. 使用 #set 设置局部变量
以 #set
为前缀,后面接赋值语句。如:
<!-- #set name = "lisi" -->
以上语句定义了一个变量 name
并设置了值。
这里的赋值也可以赋值其他变量或其他变量上的属性。
比如控制器方法传给视图一个用户类型的变量 User,我们可以在视图中定义一个变量 name 值为 user 变量的 name 属性。
<!-- #set name = user.name -->
同时设置多个变量可以用分号 ;
分隔,例如:
<!-- #set name = "lisi" ; id = "J93NF3UUBk"-->
2. 局部变量作用域
需要注意的是,使用 #set
设置的局部变量的作用域是只在所在 HTML 元素内设置变量代码那一行起,到元素结束。
如下例子:
<div>
<p>before: ${name}</p>
<!-- #set name = "lisi" -->
<p>after: ${name}</p>
</div>
<p>outter: ${name}</p>
解析渲染后将输出以下结果:
<div>
<p>before: </p>
<p>after: lisi</p>
</div>
<p>outter: </p>
我们甚至可以再把上述的作用域再缩小,自己控制何时结束这个变量的作用域,只需要使用 #endset
标记结束即可。
示例如下:
<p>before: ${name}</p>
<!-- #set name = "lisi" -->
<p>after: ${name}</p>
<!-- #endset -->
<p>在这里将访问不到name变量。</p>
3. 使用 @ 设置页面变量
页面变量与上面介绍的局部变量使用方式差不多,区别就是:
使用
@
符号作为声明前缀;声明设值的变量是作为页面全局变量
page
的属性存在,因此使用的时候需要通过该页面全局变量访问。
还是上面作用域的例子,我们改成用页面变量。代码如下:
<div>
<p>before: ${page.name}</p>
<!-- @ name = "lisi" -->
<p>after: ${page.name}</p>
</div>
<p>outter: ${page.name}</p>
此时解析渲染结果将是:
<div>
<p>before: lisi</p>
<p>after: lisi</p>
</div>
<p>outter: lisi</p>
可以看到无论是在页面变量的声明前、声明后或者在外层元素,都可以访问页面变量。
需要注意的是,页面变量的设置只允许设置直接的字面值,比如字符串和数值等等。
页面全局变量
page
中有一个属性叫layout
其值代表当前视图模板使用的布局文件。设置页面变量时要注意避免误设该值。
上一篇:基于注释的 HTPL 语法
下一篇:逻辑控制