循环语句

Beetl支持丰富的循环方式,如for-in,for(exp;exp;exp),以及while循环,以及循环控制语句break;continue; 另外,如果没有进入for循环体,还可以执行elsefor指定的语句。

for-in

for-in循环支持遍历集合对象,对于List和数组来说以及Iterator,对象就是集合对象,对于Map来说,对象就是Map.entry,如下俩个例子

  1. <%
  2. for(user in userList){
  3. print(userLP.index);
  4. print(user.name);
  5. }
  6. %>

第三行代码userLP是Beetl隐含定义的变量,是一个ILoopStatus实例,能在循环体内使用。其命名规范是item名称后加上LP,他提供了当前循环的信息,如

  • _userLP.index _当前的索引,从1开始
  • userLP.dataIndex 索引,从0开始
  • _userLP.size _集合的长度
  • userLP.first 是否是第一个
  • userLP.last 是否是最后一个
  • userLP.even 索引是否是偶数
  • userLP.odd 索引是否是奇数

如何记住后缀是LP,有俩个诀窍,英语棒的是Loop的缩写,拼音好的是老婆的拼音缩写,这可以让程序员每次写到这的时候都会想想老婆(不管有没有,哈哈)

如下是Map使用例子

  1. <%
  2. for(entry in map){
  3. var key = entry.key;
  4. var value = entry.value;
  5. print(value.name);
  6. }
  7. %>

for(exp;exp;exp)

对于渲染逻辑更为常见的是经典的for循环语句,如下例子

  1. <%
  2. var a = [1,2,3];
  3. for(var i=0;i<a.~size;i++){
  4. print(a[i]);
  5. }
  6. %>

while

对于渲染逻辑同样常见的有的while循环语句,如下例子

  1. <%
  2. var i = 0;
  3. while(i<5){
  4. print(i);
  5. i++;
  6. }
  7. %>

elsefor

不同于通常程序语言,如果没有进入循环体,则不需额外的处理,模板渲染逻辑更常见情况是如果没有进入循环体,还需要做点什么,因此,对于for循环来说,还有elsefor 用来表达如果循环体没有进入,则执行elsefor 后的语句

  1. <%
  2. var list = [];
  3. for(item in list){
  4. }elsefor{
  5. print("未有记录");
  6. }
  7. %>