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();
		}
	}
}
相關文章
相關標籤/搜索