DWZ框架-- Dialog点击保存后不能自动关闭

案例


今天在用DWZ框架作添加功能时,发如今对话框保存成功后,后端返回正确的json格式,但对话框不能自动关闭窗口,并且保存后自动跳回主页,没有停留在当前用户列表页面,具体错误过程重现以下:javascript

1.打开用户列表java


2.点击添加按钮ajax


3.在打开的添加对话窗口填入信息后,点击保存json


4.添加成功后,对话框并无自动关闭,并且用户列表也不见了后端


5.从新打开用户礼拜哦,能够看到刚才的数据已经成功保存服务器


6.后端返回的json格式也没有问题session


解决方案


为何会出现以上缘由呢?原来是由于我在添加对话窗口页面里面配置的回调函数方法配置错了,填了navTabAjaxDone该方法,可是根据dwz框架手册说明,对于dialog,应该 填入dialogAjaxDone,navTabAjaxDone该方法只针对面板窗口,错误示范以下:



对于dialog方式打开的对话框,正确的回调函数应该以下配置:


DWZ框架说明


对于navTab和dialog两种打开方式,后端返回的json数据结构是同样的,可是回调函数有所不一样,若是没有填入指定的navTabId,则默认跳回当前的navTab页面,可是数据结构和navTab方式一致,其余能够填空字符创,可是记得填入setv("callbackType", "closeCurrent") ,不然当前对话框保存成功会也不会自动关闭,如下是后端json数据样例以及官方源码:




/**
 * navTabAjaxDone是DWZ框架中预约义的表单提交回调函数.
 * 服务器转回navTabId能够把那个navTab标记为reloadFlag=1, 下次切换到那个navTab时会从新载入内容. 
 * callbackType若是是closeCurrent就会关闭当前tab
 * 只有callbackType="forward"时须要forwardUrl值
 * navTabAjaxDone这个回调函数基本能够通用了,若是还有特殊须要也能够自定义回调函数.
 * 若是表单提交只提示操做是否成功, 就能够不指定回调函数. 框架会默认调用DWZ.ajaxDone()
 * <form action="/user.do?method=save" onsubmit="return validateCallback(this, navTabAjaxDone)">
 * 
 * form提交后返回json数据结构statusCode=DWZ.statusCode.ok表示操做成功, 作页面跳转等操做. statusCode=DWZ.statusCode.error表示操做失败, 提示错误缘由. 
 * statusCode=DWZ.statusCode.timeout表示session超时,下次点击时跳转到DWZ.loginUrl
 * {"statusCode":"200", "message":"操做成功", "navTabId":"navNewsLi", "forwardUrl":"", "callbackType":"closeCurrent", "rel"."xxxId"}
 * {"statusCode":"300", "message":"操做失败"}
 * {"statusCode":"301", "message":"会话超时"}
 * 
 */
function navTabAjaxDone(json){
	DWZ.ajaxDone(json);
	if (json[DWZ.keys.statusCode] == DWZ.statusCode.ok){
		if (json.navTabId){ //把指定navTab页面标记为须要“从新载入”。注意navTabId不能是当前navTab页面的
			navTab.reloadFlag(json.navTabId);
		} else { //从新载入当前navTab页面
			var $pagerForm = $("#pagerForm", navTab.getCurrentPanel());
			var args = $pagerForm.size()>0 ? $pagerForm.serializeArray() : {}
			navTabPageBreak(args, json.rel);
		}
		
		if ("closeCurrent" == json.callbackType) {
			setTimeout(function(){navTab.closeCurrentTab(json.navTabId);}, 100);
		} else if ("forward" == json.callbackType) {
			navTab.reload(json.forwardUrl);
		} else if ("forwardConfirm" == json.callbackType) {
			alertMsg.confirm(json.confirmMsg || DWZ.msg("forwardConfirmMsg"), {
				okCall: function(){
					navTab.reload(json.forwardUrl);
				},
				cancelCall: function(){
					navTab.closeCurrentTab(json.navTabId);
				}
			});
		} else {
			navTab.getCurrentPanel().find(":input[initValue]").each(function(){
				var initVal = $(this).attr("initValue");
				$(this).val(initVal);
			});
		}
	}
}

/**
 * dialog上的表单提交回调函数
 * 当前navTab页面有pagerForm就从新加载
 * 服务器转回navTabId,能够从新载入指定的navTab. statusCode=DWZ.statusCode.ok表示操做成功, 自动关闭当前dialog
 * 
 * form提交后返回json数据结构,json格式和navTabAjaxDone一致
 */
function dialogAjaxDone(json){
	DWZ.ajaxDone(json);
	if (json[DWZ.keys.statusCode] == DWZ.statusCode.ok){
		if (json.navTabId){
			navTab.reload(json.forwardUrl, {navTabId: json.navTabId});
		} else {
			var $pagerForm = $("#pagerForm", navTab.getCurrentPanel());
			var args = $pagerForm.size()>0 ? $pagerForm.serializeArray() : {}
			navTabPageBreak(args, json.rel);
		}
		if ("closeCurrent" == json.callbackType) {
			$.pdialog.closeCurrent();
		}
	}
}
相关文章
相关标签/搜索