1.上面是 Freeform 表头,下面是Treelist表体,实现了常见的主表-明细表的单据输入方式;
2.请注意分析源码中数据的加载方式;



1.上面是 Freeform 表头,下面是Treelist表体,实现了常见的主表-明细表的单据输入方式;
2.在本例中,表头和表体共享了同一个XML数据,OnReady( )源码如下;
var count=0;
function OnReady(id)
{
 count++;
 if(count != 2) return;

 //创建Freeform、Treelist
 AFmaster.func("build", "treelist/freeform_master.xml");
 AFdetail.func("build", "treelist/t_detail.xml");
 
 //Freeform作为 Master 绑定到Treelist,以共享Treelist加载的数据中的<masterPart>下的内容
 var h = AFdetail.func("GetHandle", "");
 AFmaster.func("BindAsMaster", h + "\r\n masterPart");
 
 //Treelist加载数据,使用其中的<detailPart>下的数据
 //同时把<masterPart>部分数据交给了Freeform
 AFdetail.func("Load", "treelistdata/combine.xml \r\n Node=detailPart");
}
表头、表体使用了数据中不同部分,示意如下:

  当然,也不一定要采用上述绑定的做法,因为Freeform 和 Treelist本身都有Load( )函数可以加载数据。本例的目的为:
    1.表头表体数据放在一起,可以减轻后端开发工作量;
    2.减少Http请求数;

3.请注意上述OnReady( )中第13行源码,采用了一个变量readyCount,表示Treelist和Freeform全部已准备好才能绑定取数,因为本例中Treelist 和 Freeform处在不同的<div>中,而浏览器是以多线程方式工作的,写在脚本中靠前的位置的div未必先完成创建!

4.提交数据时,可以分别调用GetChangedXML( )取得二段XML,将其并在一起提交。请对表格作些操作,然后