ThinkPHP+DWZ, Dialog刷新问题

一.应用背景:通过第一个dialog编辑主表数据,并通过在第一个dialog上打开的第二个dialog编辑子表数据,希望在第二个dialog中的表单提交后刷新第一个dialog。

二.解决方案分析:

     方法1(引用自点击打开链接)

     1)在删除按钮上添加callback属性,添加回调函数。

     2)扩展dwz,在dwz.dialog.js中添加如下扩展代码:
reloadDialog:function(dialogId){var dialog = $("body").data(dialogId);if(dialog){$.pdialog.reload(dialog.data("url"),{dialogId:dialogId});}},
    3)在回调函数中使用
function dialogAjax(json){$.pdialog.reloadDialog("triggerList");
}
    方法1缺点:刷新后的第一个dialog的数据不全,部分multiselect数据丢失,且子表table中没有数据,原因不清楚。

    方法2(引用自点击打开链接)

    1)在 dwz.min.js 中 增加新的方法

function dialogAjaxDoneThis(json){  //840206883@qq.com
DWZ.ajaxDone(json);if(json.statusCode==DWZ.statusCode.ok){if(json.navTabId){$.pdialog.reload(json.forwardUrl,json.navTabId);}}}
    2)表单中增加
 
 
    3)将dialogAjaxDoneThis加入第二个dialog中表单的onsubmit中。

    方法2缺点同方法1,应该是$.pdialog.reload的问题,所以想尝试方法3。
    方法3

    原理就是将

$.pdialog.reload(json.forwardUrl,json.navTabId);

    替换成
$.pdialog.close(dialog); 参数dialog可以是弹出层jQuery对象或者是打开dialog层时的dlgId.
$.pdialog.open(url, dlgId, title, options);
    尝试一下没成功,大概是函数调用的不正确,想到在我的第一个dialog中有多个标签页,且子表所在标签页并不是第一个,即便成功,刷新后的标签将变成第一个,而且重新打开后的dialog位置也会恢复到默认位置,用户体验不好,放弃尝试。

    方法4(受启发于点击打开链接中有位哥们提到用loadUrl重载,又结合了方法2的思路)
   1)在 dwz.min.js 中 增加新的方法

function reloadDialogWin(json){ DWZ.ajaxDone(json); if (json.statusCode == DWZ.statusCode.ok){ var id="#"+json.navTabId;$(id).loadUrl(json.forwardUrl,'11',''); if ("closeCurrent" == json.callbackType) { $.pdialog.closeCurrent(); } }
}
    2)新增一个专门用来刷新第一个dialog的action:re_edit及相应的re_edit.html,且在Html文件中将默认标签页设成子表所在标签页。另外给原edit.html中的最外层div增加id="re_edit_pwps"; ( 不需要新建action和html,只要通过url传递一个默认标签序号过来,将原默认标签页的值换成currentIndex="{:I('dindex')}"就可以了

    2)表单中增加


   3)将reloadDialogWin加入第二个dialog中表单的onsubmit中。

    方法4的优点,所有数据都完整,且窗口位置不变,标签页没有恢复至默认。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部