![]() |
1.这个工具条其实就是freeformBar,和上例中的“查询区”属于同一个范畴; 2.按钮都是freeform中的按钮,触发的也全部是freeform的事件,通过即时更改 TableLayout 的 “Visible” 属性实现freeform的重新展现; 3.本例将查询条件存入本地Cache了,请输入查询条件按“确认”按钮后,关闭浏览器,再进入,观察查询条件; 4.真实的查询请参考演示页 "30.FreeformBar". |
![]() |
1.采用了上一个demo页中的Treelist,但是没有采用其内定的FreeformBar,而是在OpenFreeformBar( )函数中指向另一个:function OnReady(id) { AF.func("Build", "treelist/t20.xml"); AF.func("Load", 'treelistdata/data.txt'); AF.func("OpenFreeformBar","treelist/query2.xml"); //立即开启FreeformBar, 使用query2.xml作为Freeform } 2.上面的XML中引用的 query2.xml 是一个标准的freeform(自由表头),它包含了多个TableLayout. query2.xml是用表单设计器设计出来的,请详见"自由表头"部分的demo页“16.Freeform设计器”; 3.js源码分析如下: //Supcan事件 function OnEvent(id, Event, p1, p2, p3, p4) { if(Event=="ButtonClicked") { if(p1 == "btn3") { //打印预览按钮 AF.func("PrintPreview", ""); return; } if(p1 == "close1" || p1=="close2") { //关闭:调用freeform的扩展函数SetObjectProp( ),让用于条件输入的TableLayout隐藏 AF.func("tBar.SetObjectProp", "layout1,layout2,mirror \r\n visible \r\n 0"); return; } if(p1=="ok1" || p1=="ok2") { //确认:调用freeform的扩展函数Export( ),取得查询条件的XML串 var xml = AF.func("tBar.Export", "includeHide=false;includeEmpty=false"); //查询条件保存到本地Cache AF.func("SaveCache", "top" + p1 + "\r\n" + xml + "\r\n Persist=File"); //如果需要json格式: 执行全局函数 toJSON AF.func("MessageBoxFloat", AF.func("toJSON", xml + "\r\n recordset")); return; } //打开不同的条件查询框:让部分TableLayout隐藏、另一部分显示 if(p1 == "btn1") { AF.func("tBar.SetObjectProp", "layout2 \r\n visible \r\n 0"); AF.func("tBar.SetObjectProp", "mirror, layout1 \r\n visible \r\n 1"); //从本地Cache读取初始值 var cache = AF.func("ReadCache", "topok1"); if(cache != "") AF.func("tBar.Load", cache + "\r\n useLast=true"); //useLast=true表示部分替换(初始日期部分) } else if(p1 == "btn2") { AF.func("tBar.SetObjectProp", "layout1 \r\n visible \r\n 0"); AF.func("tBar.SetObjectProp", "mirror, layout2 \r\n visible \r\n 1"); //从本地Cache读取初始值 var cache = AF.func("ReadCache", "topok2"); if(cache != "") AF.func("tBar.Load", cache + "\r\n useLast=true"); //useLast=true表示部分替换(初始货重部分) } } } |