循环语句
Beetl支持丰富的循环方式,如for-in,for(exp;exp;exp),以及while循环,以及循环控制语句break;continue; 另外,如果没有进入for循环体,还可以执行elsefor指定的语句。
for-in
for-in循环支持遍历集合对象,对于List和数组来说以及Iterator,对象就是集合对象,对于Map来说,对象就是Map.entry,如下俩个例子
<%
for(user in userList){
print(userLP.index);
print(user.name);
}
%>
第三行代码userLP是Beetl隐含定义的变量,是一个ILoopStatus实例,能在循环体内使用。其命名规范是item名称后加上LP,他提供了当前循环的信息,如
- _userLP.index _当前的索引,从1开始
- userLP.dataIndex 索引,从0开始
- _userLP.size _集合的长度
- userLP.first 是否是第一个
- userLP.last 是否是最后一个
- userLP.even 索引是否是偶数
- userLP.odd 索引是否是奇数
如何记住后缀是LP,有俩个诀窍,英语棒的是Loop的缩写,拼音好的是老婆的拼音缩写,这可以让程序员每次写到这的时候都会想想老婆(不管有没有,哈哈)
如下是Map使用例子
<%
for(entry in map){
var key = entry.key;
var value = entry.value;
print(value.name);
}
%>
for(exp;exp;exp)
对于渲染逻辑更为常见的是经典的for循环语句,如下例子
<%
var a = [1,2,3];
for(var i=0;i<a.~size;i++){
print(a[i]);
}
%>
while
对于渲染逻辑同样常见的有的while循环语句,如下例子
<%
var i = 0;
while(i<5){
print(i);
i++;
}
%>
elsefor
不同于通常程序语言,如果没有进入循环体,则不需额外的处理,模板渲染逻辑更常见情况是如果没有进入循环体,还需要做点什么,因此,对于for循环来说,还有elsefor 用来表达如果循环体没有进入,则执行elsefor 后的语句
<%
var list = [];
for(item in list){
}elsefor{
print("未有记录");
}
%>