演示一: 通过定义 <Properties LazyLoad="true" ... >属性, 树杈从后端实时加载数据;
模拟场景: 所有树杈在展开(Expand)前并不知道是否有子孙节点,鼠标点击树杈时通过事件动态从服务器取数;
技术分析
1.OnReady事件:
if(id=='AF1') {
 AF1.func("Build", "treelist/t2.xml \r\n lazyload=true; editAble=false"); //lazyload=true表示默认全部是树杈
 AF1.func("Load", "http://www.supcan.cn/DotNet/GetFin.aspx?format=byid");  //从后端加载树的第一层
}
2.OnEvent事件:
if(id == 'AF1' && Event == "LazyLoad") {
 var url = "http://www.supcan.cn/DotNet/GetFin.aspx?format=byid&kmdm=" + p2;
 //从URL加载数据,并插入表格中
 //因为format=byid, 所以不必指定插入的位置
 AF1.func("load", url + "\r\n fillmode=insert");
}
3.这是类似的数据格式, 由后端的C#源码生成.


演示二: 数据格式采用treeformat=byPid, 且 LazyLoad 是一个表达式;
模拟场景: 可以通过表达式算得树杈的子孙行,所以不需要通过外部事件解决;
技术分析
1.该XML描述文件和前面的有轻微差别,差别在:
//LazyLoad是表达式
<Properties isTree="true" treeformat="byPid" lazyload="'http://www.supcan.cn/DotNet/GetFin.aspx?format=bypid&kmdm=' + id"  ...>
...
//pid列是必需的,让其隐藏即可
<Col name="pid" isHide="absHide" />
//id列是必需的 (即kmdm)
<Col name="id"  width="150">科目代码</Col>
2.这是类似的数据格式.


演示三: 数据格式采用treeformat=byData, XML模板中含有LazyLoad列;
模拟场景: 知道每行是否有子孙,取子孙的URL是在每行的“LazyLoad”数据列中.
技术分析
1.该XML描述文件和前面的有轻微差别,差别在:
//LazyLoad是表达式
<Properties isTree="true" treeformat="byData" ...>
...
//含有固定的LazyLoad列,让其隐藏即可
<Col name="LazyLoad" isHide="absHide" />
2.这是类似的数据格式,内含取得子孙的LazyLoad的URL.