10.事件
10.1 OnReady
OnReady事件是指功能组件的实例已经成功创建后,插件/加载项通知页面的事件,它表示插件的生命周期已经开始,这样页面js就可对其作进一步的操控,例如加载数据。当然在<body>的 onLoad( ) 事件中也可以对组件进行操控,但是我们强烈建议不要写在onLoad()事件中,因为在 onLoad( ) 事件执行时,组件实例未必已创建。
<script>
function OnReady( id )
{
AF.func('Build', 'index.XML');
}
</script>
插件或加载项只有经过 OnReady 触发才可用,在 OnReady 前试图调用插件的函数都是无效的,因为它的生命周期尚未开始。
<script>
function OnReady( id )
{
if(id=='AF1')
AF1.func('Build', 'index.XML');
else if(id=='AF2')
AF2.func('Build', '../index.aspx?pure=xml');
}
</script>
初学者常常会写错,比如写成如下这种不正确的脚本:
<script>
function OnReady( id )
{
AF1.func('Build', 'index.XML');
AF2.func('Build', '../index.aspx?pure=xml');
}
</script>
因为 AF1、AF2 会在各自生命周期开始时触发 OnReady 事件, 假如 AF1 先触发, 那么在 AF1 执行 OnReady 时, AF2 的生命周期通常还没有开始, 所以务必请注意.
...
<script>
function OnReady( id )
{
AF.func('Build', 'myReport.XML');
}
function queryReport()
{
AF.func('SetSource', 'ds1 \r\n servlet/do?num=12&year=2016');
AF.func('calc', '');
}
</script>
...
<body>
<input type="button" onClick="queryReport()" value=" 查询 " >
...
10.2 OnEvent
OnEvent事件是由功能组件的某个动作触发的,例如鼠标、键盘、状态变化等,在何时抛出事件、以及事件的各个参数的含义请参考功能组件各自的文档。
<script>
//OnEvent参数说明: “Event”为事件名,p1,p2,p3,p4参数有特定的含义,由具体的功能组件规定.
function OnEvent(id, Event, p1, p2, p3, p4)
{
if(Event == "SelChanged")
document.getElementById('Page1').src=p2;
else if(Event == "RButtonDown")
AF.func("SetCellData", "1 \r\n price \r\n300");
}
//注1: 控件能触发哪些事件,请参考功能组件的相关文档中的“事件”章节;
//注2: 通常情况下 p1, p2, p3, p4 参数中不会包含回车符,如果里面包含了回车符,那么回车符是 "\\r\\n" 这种形式的串;
</script>
控件在运行过程中,会触发大量的 OnEvent 事件,您必须通过 if( ) ... else if( ) ... else if( ) ... 条件判断,筛选出您感兴趣的事件执行,就像上例中的那样。
function OnEvent(id, Event, p1, p2, p3, p4)
{
var xml = AF.func("GetChangedXML", "");
}
事件的语法规则、以及上述示例,
、
和
是没有差别的。

对上例稍加分析,你会发现所谓 “事件” 只是普通的页面 js 函数,只不过这二个函数名被硕正插件/加载项占用了,当组件触发事件时,实际上就是由插件/加载项反向调用页面的 js 函数而已!

事件脚本应该写在页面的 <head> 中,而不应该写在 <body> 中.

硕正套件允许在创建参数中增加事件日志,使得您可以查看事件的触发情况,请详见树列表或报表的 “1.创建实例” 章节.