`
javatar
  • 浏览: 1680366 次
  • 性别: Icon_minigender_1
  • 来自: 杭州699号
社区版块
存档分类
最新评论

CommonTemplate准备增加对树结构递归迭代的支持

阅读更多
在应用程序开发中, 经常用到树结构, 如组织机构树, 功能菜单树等等.
树的通常表示为对象内部持有子节点方式, 如:
class Menu {
	String name;
	List<Menu> children;
}

显示时, 递归迭代, 直到children为空或零为止.
用普通的for循环是很难做到的. 如:
$for{menu: menus}
	$for{child: menu.children}
		...
	$end
$end

所以考虑增加一个指令, 可进行内递归循环, 如:
$recur{menu : menus -> children} // -> 后可以为lambda表达式, 如: -> xxx? xxx.children : yyy.children
	${super.menu} // 内递归时, 可以用"super.menu"取到上层菜单.
$end

当然, 指令的具体方案有待考虑,
是否用"recur"命名也有待斟酌,
或者直接用"$tree"? 那样"$for"指令是否类似的用"$list"?
5
3
分享到:
评论
4 楼 javatar 2008-05-06  
嗯, 看起来用宏能够实现, 但提供指令可能会更方便.
3 楼 jasongreen 2008-04-30  
有过类似问题,可以用macro自调用实现。
实现统一指令比较麻烦。
$macro{recur,menu} 
   ...A...
   $for(m:menu.children)// .children -- E
      ..B..//handle m
        $recur(m);
      ..C..//handle m
   $end
   ..D....
$end 

$recur(topMenu)


A、B、C、D、E 均是可配置信息,A,D可省略。B,C 本身是 CT代码

$recur(topMenu,'children()',..B..,..C..) 

这种方式,..B..,..C.. 写的会不爽。

或者使用下面的语法:
$recur(topMenu,'children()')
 $prefix
   ..B..   //but what's the variable name of m, define a default name
 $end
 $suffix
   ..C..   //but what's the variable name of m, define a default name
 $end
$end

2 楼 jianfeng008cn 2008-04-30  
支持!强烈支持!
1 楼 jindw 2008-04-30  
很好很强大!

相关推荐

Global site tag (gtag.js) - Google Analytics