26
2019.2
一般变量赋值
作者: POPASP
一般变量赋值
格式:`{:$varName=expression}`
### 标量赋值(数值、字符串、布尔值等)
```brush:html
{:$varName="popasp.com"} {//变量赋值}
{$varName} {//变量输出}
```
### 模板变量赋值的本质
变量赋值时,是将右侧的运算结果赋值给左侧的“变量”。左侧的“变量”是POP_MVC.tpl_vars这个Dictionary对象的一个键名,变量赋值本质是给POP_MVC.tpl_vars分配了一个键值对,所以在输出时要注意“变量”名的大小写。我们也可以通过表达式输出来显示分配的值。
在控制器中,我们使用了that.d来进行赋值,模板赋值与使用that.d赋值本质是一致的。
### Dictionray变量赋值
```brush:html
{:$dict = D_}
{:$dict.userName = "popasp"}
{:$dict.groupQQ = "124648143"}
```
或者
```brush:html
{:$dict = D_}
{:$dict("userName") = "popasp"}
{:$dict("groupQQ") = "124648143"}
```
输出Dictonray对象的变量时,不能这样使用
```brush:html
{$dict}
```
因为它是一个Dictionary对象,不能直接进行字符串的拼接。应该这样使用
```brush:html
{$dict.userName}
{$dict.groupQQ}
```
### 变量名称可以是汉字
变量名可以是汉字,这个好消息可能再次让你惊艳于POPASP的人性化设计。是的,POPASP就是通过强大的巧妙设计,给asper一个留恋asp的理由。
```brush:html
{:$变量="www.popasp.com"}
{:$dict = D_}
{:$dict.网址="www.popasp.com"}
{:$dict("网址")="www.popasp.com"}
```
### 变量输出
在模板中分配变量,是为了利用它,在模板中输出变量是我们经常要处理的一项工作。
除了
```brush:html
{$变量名}
```
这样的常规使用外,在理解了其实质为POP_MVC.tpl_vars的属性后,也可以使用原生的方法进行输出,如下所示:
```brush:html
{=POP_MVC.tpl_vars("varName")} {//popasp.com}
```
也可以通过`V_`函数来显示分配的值
```brush:html
{=V_("varName")} {//popasp.com}
```
### 采用函数进行变量赋值
变量赋值右侧表达式是灵活的,可以是在asp中书写的任意表达式,当然也可以是函数,举例:
```brush:vb
{:$file_content=POP_MVC.file_get_contents(POP_MVC.mvc_dir & "popasp_mvc.class.asp" )} {//获取文件内容}
{$file_content} {//输出文件内容}
```
### 赋值Recordset对象
```brush:html
{:$row=B_("user").where(1).find}
{:$rs=B_("content").top(10).select}
```
变量赋值是灵活多样的,可以像asp原生态那样随意赋值,不仅可以分配字符串、数字、布尔值,也可以分配使用set的对象,在模板中使用时,不要再额外的使用set,这样的设计也是为了开发者的方便考虑。
```brush:html
{:$article = B_("content").getRow()} {//从文章数据表中取出一条记录,Dictionary对象}
{$article.Title} {//如果表中的字段Title首字母为大写,这里也要将T大写,因为article是一个Dictionary对象}
{$row = B_("content").field("TITLE").find()} {//从文章数据表中取出一条记录,Recordset对象}
{$row.title} {//由于row是一个Recordset对象,取字段值不需要区分大小写,这里也不需要区分大小写。}
{$row.0} {//错误的写法。采用数字的写法在这里是不能被解析的,并报错: [POPASP Warning] [不能正确解析变量“row.0”,变量未分配或变量名不正确(请注意大小写)]}
{$article} {//错误的写法。由于是对象,不能被输出。并报错:输出 {$article} 时发现错误:错误的参数个数或无效的参数属性值]}
{=js_encode($article)} {//如果是出于查看的目的,我们可以用表达式输出$article。}
```
### 不能被解析的字符
在一般变量赋值时`{:$varName=expression}`,expression表达式中不能含有“{”、“}”、“?”。含有?符号,则会被当成三元赋值或二元赋值进行解析。如果不能避免“?”的出现,可以使用`__WH__`或`__WHN__`(N代表个数)来代替。
```brush:html
{:$temp = "拥有3个__LJ3__,4个__RJ4__,和5个__WH5__"}
{$temp}
```
结果为“拥有3个{{{,4个}}}},和5个?????”