全局函数
  所谓全局函数是一组公共的函数,硕正的所有组件都拥有几乎完全一样的函数形式. 全局函数分如下几类:
  1.非模式对话框函数
  2.模式对话框函数
  3.消息框函数
  4.下拉List管理函数
  5.Validations管理函数
  6.对“计算函数”的封装
  7.DOM函数
  8.其它函数


1.对话框函数

  全局函数中有二组对话框函数。通过调用对话框函数,您能够打开一个对话框。对话框是以 一个FreeForm 作为显示样式的,其内容完全自定义.
  硕正的对话框分为 模式对话框 和 非模式对话框 二种,模式对话框是Windows的标准对话框,当对话框出现时, 主线程是阻塞的,直到对话框关闭;而非模式对话框则是在控件的内部浮现出一个freeform,主线程不会阻塞.
  非模式对话框的好处,是在打开对话框时不影响其它Tab选项卡 - 用户仍能正常切换选项卡. 此外,由于线程不阻塞,对话框中的 freeform 的子控件的事件能触发到页面的OnEvent( )中,能实现与页面的交互,这一点非常有用.


1.1.非模式对话框函数

回到目录
  非模式对话框是悬浮在组件中央的一个FreeForm,同时组件本身呈半透明、非活动状态.
  并不是所有组件都支持内嵌的非模式对话框的,如下组件是支持的(即支持本组函数):
    Treelist / Freeform / Freeform设计器 / Report / Tree / Chart.
  非模式对话框 和 它的容器(即组件本身)都会触发页面的OnEvent( )事件,为了相互区分,您应该在事件中调用 IsInnerDialogOpen( ) 这个函数来判断,这一点非常重要,具体请参见自有表头的演示页:“13.基于Freeform的对话框”、“15.辅助Treelist输入(2)”。




1.2.模式对话框函数

回到目录
  模式对话框的FreeForm至少要有1个Button,但不支持菜单、下拉菜单按钮、分页器.
  模式对话框弹出后,如果用户按下其中的Button,对话框随即关闭,并返回Button按钮的ID。
  由于模式对话框是线程阻塞的,对话框中的控件的事件是无法被页面拦截的。模式对话框的函数分类说明如下:



3.消息框函数

回到目录
  消息框是指在组件中心位置呈现出的时尚的提示框、数据加载中的小对话,有了这批函数,您可以自己操控这些提示信息了.



4.下拉List管理函数

回到目录
  全局函数中还有一组用于操控下拉List的函数,能单独存取List的内容。下拉List的句柄是通过GetHandle( )函数获取的.



5.Validations管理函数

回到目录
  本函数集用于单独管理 Treelist 或 Report 中的<Validations>.



6.对“计算函数”的封装

回到目录
  “开发者指南 \ 公共内容” 中的 “计算函数” 一般单独用于硕正组件自身的表达式,但也可以用 AF.func( ) 单独调用,例如.
 //返回串 "壹万零壹佰贰拾叁元贰角肆分"
 var s = AF.func("RMB", "10123.24");
 
 //返回串 "10,123.20"
 var s = AF.func("formatNum", "10123.2 \r\n #,##0.00");
  Report报表中的数据源函数,象 "data"、"head"这些取得单个数据的函数,可以通过本方法获取, 但 "datarow"、"headrow"这些函数就无法支持了。


7.DOM函数

回到目录
  DOM(文档对象模型)是XML/JSON在内存中的OO结构模型,通过以下的DOM函数集,您可以较方便地解析、修改或生成XML串. 为了能理解函数及参数的作用,我们先对某些术语作一个解释、约定:
1.DOM句柄
  XML/JSON是一棵树,树的每一个节点(包括树杈、树叶)在内存中都是DOM类的对象实例,而每个对象实例都有一个唯一的指针地址的,我们就把这个指针地址称作“句柄”。
2.DOM父亲、子孙
  由于XML/JSON可以是任意级别的复杂树,所以每个DOM对象中,都有父亲、子孙的存储位置的。没有父亲的DOM对象就是根节点,没有儿子的DOM对象就是树叶。
3.DOM元素名、属性
  按常规的资料,都叫做元素,但我们这里稍加区分:
  这样,每个DOM对象都有一个元素名,同时也可以有多个属性,以及属性对应的值.
4.内存泄漏
  如果您创建了DOM对象,但没有销毁它,那么势必会造成该内存块始终被占用,这就是所谓的内存泄漏。除非如下文档中有特别的声明,否则您最终必须销毁该对象。
  子孙DOM对象是不需要你去销毁的,因为父对象在销毁自己的同时,它自己会去逐个销毁子孙对象的。
5.实例
  如下3个例子由浅入深,演示了部分DOM函数的功能,假如这是原始的XML:
<root>
 <product id='001'>MB</product>
</root>
  例一.简单的转换
 var xml="<root><product id='001'>MB</product></root>";
 var hRoot = AF.func("dom_new", xml);  //创建DOM对象
 alert(AF.func("dom_export", hRoot));  //export为 XML 串
 AF.func("dom_delete", hRoot);  //最后必须销毁


  例二.更改元素的内容
 var hRoot = AF.func("dom_new", xml);  //创建DOM对象
 var hProd = AF.func("dom_find", hRoot + "\r\n product");  //定位到 product 元素
 AF.func("dom_setProp", hProd + "\r\n id \r\n100000");  //修改属性
 AF.func("dom_setProp", hProd + "\r\n #text \r\nUser");  //修改text
 alert(AF.func("dom_export", hRoot));
 AF.func("dom_delete", hRoot);  //最后必须销毁


  例三.添加节点、删除节点:
 var hRoot = AF.func("dom_new", xml);  //创建DOM对象
 
 //插入一个新的对象
 var hNew = AF.func("dom_new", "");  //创建一个空的DOM元素
 AF.func("dom_setName", hNew + "\r\n customer");  //设定元素名
 AF.func("dom_setProp", hNew + "\r\n #text \r\nUser");  //设定text
 AF.func("dom_insertChild", hRoot + "\r\n -1 \r\n" + hNew);
 
 //删除 product 节点
 var hProd = AF.func("dom_find", hRoot + "\r\n product");
 AF.func("dom_Delete", hProd);
 
 //查看结果
 alert(AF.func("dom_export", hRoot));
 AF.func("dom_delete", hRoot);  //最后必须销毁根节点




8.其它函数

回到目录