舉例來說, 進入首頁->點擊用戶列表出現"用戶列表"navTab->在"在用戶列表"navTab中點擊添加出現"添加用戶"navTab->添加完成並關閉"添加用戶"navTab,並刷新"用戶列表"navTab 這個流程
首先在首頁進入"用戶列表"navTab的鏈接中要指定這個navTab的rel屬性,如下,這個navTab的rel屬性被指定為main
<a href="user/userlist.html" target="navTab" rel="main">用戶列表</a>
然后,在"添加用戶"這個navTab的html代碼中需要指定提交表單后需要返回的函數,如下,
onsubmit="return validateCallback(this, navTabAjaxDone)",提交后執行了validateCallback(),在這個函數中又執行了navTabAjaxDone()這個函數
<form method="post" action="user/douseradd.html?navTabId=useraddnavTab&callbackType=closeCurrent" class="pageForm required-validate" onsubmit="return validateCallback(this, navTabAjaxDone)">
下面找到navTabAjaxDone()這個函數
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); }); } } }
其他具體功能在這里不過多解釋,重點是下列代碼
if (json.navTabId){ //把指定navTab頁面標記為需要“重新載入”。注意navTabId不能是當前navTab頁面的 navTab.reloadFlag(json.navTabId); }
可以看出,這里會判斷服務器后台返回的json中是否有navTabId這個字段,如果有就調用navTab.reloadFlag(json.navTabId)這個函數刷新指定的navTab
就需要在服務器回傳的json中加入navTabId,並將值設為要刷新的navTab的rel值,已上面的舉例就是main