![]() |
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,将其并在一起提交。请对表格作些操作,然后 |