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