全局函数
所谓全局函数是一组公共的函数,硕正的所有组件都拥有几乎完全一样的函数形式. 全局函数分如下几类:
1.非模式对话框函数
2.模式对话框函数
3.消息框函数
4.下拉List管理函数
5.Validations管理函数
6.对“计算函数”的封装
7.DOM函数
8.其它函数
1.对话框函数
全局函数中有二组对话框函数。通过调用对话框函数,您能够打开一个对话框。对话框是以 一个FreeForm 作为显示样式的,其内容完全自定义.
硕正的对话框分为 模式对话框 和 非模式对话框 二种,模式对话框是Windows的标准对话框,当对话框出现时, 主线程是阻塞的,直到对话框关闭;而非模式对话框则是在控件的内部浮现出一个freeform,主线程不会阻塞.
非模式对话框的好处,是在打开对话框时不影响其它Tab选项卡 - 用户仍能正常切换选项卡. 此外,由于线程不阻塞,对话框中的 freeform 的子控件的事件能触发到页面的OnEvent( )中,能实现与页面的交互,这一点非常有用.
非模式对话框是悬浮在组件中央的一个FreeForm,同时组件本身呈半透明、非活动状态.
并不是所有组件都支持内嵌的非模式对话框的,如下组件是支持的(即支持本组函数):
Treelist / Freeform / Freeform设计器 / Report / Tree / Chart.
非模式对话框 和 它的容器(即组件本身)都会触发页面的OnEvent( )事件,为了相互区分,您应该在事件中调用 IsInnerDialogOpen( ) 这个函数来判断,这一点非常重要,具体请参见自有表头的演示页:“13.基于Freeform的对话框”、“15.辅助Treelist输入(2)”。
模式对话框的FreeForm至少要有1个Button,但不支持菜单、下拉菜单按钮、分页器.
模式对话框弹出后,如果用户按下其中的Button,对话框随即关闭,并返回Button按钮的ID。
由于模式对话框是线程阻塞的,对话框中的控件的事件是无法被页面拦截的。模式对话框的函数分类说明如下:
消息框是指在组件中心位置呈现出的时尚的提示框、数据加载中的小对话,有了这批函数,您可以自己操控这些提示信息了.
全局函数中还有一组用于操控下拉List的函数,能单独存取List的内容。下拉List的句柄是通过GetHandle( )函数获取的.
本函数集用于单独管理 Treelist 或 Report 中的<Validations>.
“开发者指南 \ 公共内容” 中的 “计算函数” 一般单独用于硕正组件自身的表达式,但也可以用 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"这些函数就无法支持了。
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); //最后必须销毁根节点