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 });
        }
    }
}

 

posted @ 2012-02-13 13:42  Jolly-zhang  阅读(2070)  评论(3编辑  收藏  举报