设置变量

除了从控制器方法传递变量值给视图,还支持直接在视图中定义变量并赋值使用。

下面设置的变量设置方法都是不需要声明类型的。

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 语法 下一篇:逻辑控制

results matching ""

    No results matching ""