DWZ富客户端框架应用,以及改良(二)
发现了一个大bug,该bug主要影响下面这种操作场景:
当用户在一个列表页面,对列表中的一条记录进行编辑或者新增时(target="navTab"模式),当编辑或新增完成时,关闭当前编辑、新增页面,跳转回刚才的列表页面,且刷新该页面(保持上次用户操作的情况,即分页和查询条件保持不变,只是刷新列表信息)。
按照dwz的理念,如果要实现以上操作,只需要在操作完成的时候返回json中包含rel参数就可以了,可是经过测试发现执行没有效果。
主要是dwz.ajax.js文件中的几个方法有问题:
解决方案为,替换以下方法为:
function navTabAjaxDone(json) {
DWZ.ajaxDone(json);
if (json.statusCode == DWZ.statusCode.ok) {
if ("closeCurrent" == json.callbackType) {
navTab.closeCurrentTab(json.navTabId);
} 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);
}
});
} else {
navTab.getCurrentPanel().find(":input[defaultValue]").each(function() {
var defaultVal = $(this).attr("defaultValue");
$(this).val(defaultVal);
});
}
if (json.navTabId) { //把指定navTab页面标记为需要“重新载入”。注意navTabId不能是当前navTab页面的
navTab.reloadFlag(json.navTabId);
} else if(json.rel) { //重新载入当前navTab页面
navTabPageBreak({}, json.rel);
}
}
}
执行顺序必须调换过来,不然navtab重载会有问题。
function dwzPageBreak(options) {
var op = $.extend({ targetType: "navTab", rel: "", data: { pageNum: "", numPerPage: "", orderField: "", orderDirection: "" }, callback: null }, options);
var $parent = op.targetType == "dialog" ? $.pdialog.getCurrent() : navTab.getCurrentPanel();
if (op.rel) {
var $box = $("#" + op.rel);//这个以前是从当前panel中查找,这样查找肯定是找不到的
var form = _getPagerForm($box, op.data);
if (form) {
$box.ajaxUrl({
type: "POST", url: $(form).attr("action"), data: $(form).serializeArray(), callback: function() {
$box.find("[layoutH]").layoutH();
}
});
}
} else {
var form = _getPagerForm($parent, op.data);
var params = $(form).serializeArray();
if (op.targetType == "dialog") {
if (form) $.pdialog.reload($(form).attr("action"), { data: params, callback: op.callback });
} else {
if (form) navTab.reload($(form).attr("action"), { data: params, callback: op.callback });
}
}
}