打开窗体可以选择div方式和iframe方式,如果是div方式则打开窗体可直接访问父窗体的DOM,无需数据回传机制,对于iframe方式打开的窗体
目前window组件支持模态窗体和非模态窗体的数据回传,且编程方式一致。
回传参数的时机又可分为2类场景:窗体关闭时回传和窗体未关闭时回传。详述如下:
(一)窗体关闭时回传(通过给打开窗体注册“beforeClose”事件接收参数)
1.在父窗体的js中给打开窗体注册“beforeClose”事件,事件handler包含3个参数:event,ui,val,第三个参数为打开的窗体回传参数
2.在子窗体的js中通过工具类waf.windowMgr回传参数
var target=waf.window.open({ url:"../ctrls/window/examples/cascadeWin-3.jsp", openType:"iframe", ...... onBeforeClose:function iframe_ok_handler(event,ui,val){ waf("#input_win2").val(val); //val为子窗体回传参数 })
//通过waf.windowMgr.setReturnValFuncWhenClose给当前窗体关闭事件指定回传参数函数,windowMgr会在窗体关闭时 //触发执行此函数。 //这种方式无论是点击窗体标题栏右侧的"x"还是通过waf.window.close方法关闭窗体时都有效。 <script type="text/javascript"> function returnVal(){//returnVal为返回了回传的参数的函数 return $('#input_win1').val(); } waf.windowMgr.setReturnValFuncWhenClose(returnVal); function btnOkClick(){ //此处示例为点击jsp中确定按钮时绑定的函数 waf.window.close(); //如果使用了waf.windowMgr.setReturnValFuncWhenClose方法, //则无需再使用waf.window.closeWithParam($("#input_win1").val());的方式回传参数 } </script>
(二)窗体未关闭时回传,这种方式相当于提供了在窗体(iframe)中调用父页面js函数的机制
1.在父窗体的js中给打开窗体注册“retValCallBack”回调函数,包含1个参数:此参数由开发人员指定。
2.在子窗体的js中通过工具类waf.windowMgr.triggerRetValCallBack回传参数并触发“retValCallBack”回调函数
var target=waf.window.open({ url:"../ctrls/window/examples/cascadeWin-3.jsp", openType:"iframe", ...... retValCallBack:function doHandler(option){ waf("#input_win2").val(option); //option为子窗体回传参数 })
<script type="text/javascript"> function btnOkClick(){ //此处示例为点击jsp中确定按钮时绑定的函数 waf.windowMgr.triggerRetValCallBack($("#input_win1").val()) } </script>
弹出窗体默认从当前页打开,但是对于在IFRAME中弹出的窗体,希望弹出窗不要嵌在IFRAME里而是嵌在父页中(即展现在iframe的上面)就需要设置属性openFromParent为true。比如,从A页面弹出B窗体(iframe方式打开),此时A页面为WAF的根页面,此时无需在open方法中设置属性openFromParent。之后,从B窗体通过iframe方式弹出C窗体,此时设置了openFromParent为false(默认就是false),则C窗体会从B窗体内部打开。此时再从C窗体通过iframe方式弹出D窗体,如果设置openFromParent为false,则D窗体会从C窗体内部打开;如果设置openFromParent为true,则D窗体会从B窗体内部打开。