DWZ下ajax后台交互后的分页刷新

2024-01-30 15:18

本文主要是介绍DWZ下ajax后台交互后的分页刷新,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

之前做的几个项目,用上了DWZ这个UI框架作为管理后台的界面,觉得还是不错的。个人觉得有点遗憾的是这个框架的整体感觉不够企业化,缺少稳重的感觉。
在开发过程中,碰到了一些问题,这里跟大家分享一下。



DWZ版本: DWZ RIA 1.3 Final
说明:因为之前做过一些自定义,是直接将 dwz.min.js 改成 dwz.newgxu.js ,这样做对整个框架修改过大,造成以后更新与维护的各种不便。所以,现在作的修改是以覆盖的方式进行。
问题描述:
在一些分页的NAV中,进行 ajaxToDo 或者 弹出Dialog的validateCallback 后,服务器返回的json为:
{"statusCode":"200", "message":"权限删除成功", "navTabId":"permission_list","rel":"", "callbackType":"","forwardUrl":"permission/list"}
这里,会将整个NAV刷新,但我们想要的只是刷新当前页。
下面就这个问题作一些修正。
首先说一下DWZ与后台交与的形式:
1. 通过 <a target="ajaxToDo" href=""></a>
这里点击这个标签会向后台post请求,地址就是 href 的值,ajax的回调函数默认是 navTabAjaxDone
2. 通过 target="dialog"
如增加一个新用户,以dialog的方式弹出输入界面,这样写:
<a class="BUTTON" href="user/add" width="300" height="250" target="dialog" 
rel="rank_create" fresh="false">添加用户</a>
弹出内容:
<form name="form1" method="post" action="user/add"  onsubmit=
"return validateCallback(this, dialogAjaxDone);"></form>
提交这个表单后,回调函数为 dialogAjaxDone。
再说说DWZ分页的实现:
<div class="pageHeader RIGHT">
    <form id="pagerForm" name="permission_list_pageForm" style="display:none;" 
action="permission/list" method="get" onsubmit="return navTabSearch(this);">
        <input type="hidden" name="page" value="${model.page}" />     
    </form>
</div>
<div class="pageContent">
    <table class="table" width="100%"  border="1" layoutH="85" align="center" 
cellspacing="0" bordercolor="#999999" style="border-collapse:collapse">
        <thead>
            <tr>
                <th width="3%">ID</th>
                <th width="6%">应用名称</th>
                <th width="10%">名称</th>
                <th width="8%">模块名</th>
                <th width="8%">方法名</th>
                <th width="30%">说明</th>
                <th width="8%">添加人</th>
                <th width="15%">添加时间</th>
                <th width="10%">操作</th>
            </tr>
        </thead>
    </table>
    
    <div class="panelBar">
        <div class="pages">
            <span>共${model.totalCount}条</span>
        </div>
        <div class="pagination" targetType="navTab" totalCount=
"${model.totalCount}" numPerPage="${model.pageSize}" 
pageNumShown="16" currentPage="${model.page}"></div>
    </div>
</div>
说明:
可以按照上面的div分层格式写,id="pagerForm" 这个一定需要。
好了,现在开始实现刷新当前分页。先作一些准备工作:
给id="pagerForm" 增加一个唯一的名称,格式:当前{navTabId}_pageForm。
在这个Form中的 name="page" 给一个值,这个值就是当前的页码,这样方便分页刷新。
 
然后将下面两个方法加入到 总的页面中,一般是 加载dwz框架的页面,如index.html:
    /**
     * 弹出窗口编辑提交后,异步处理函数,在这里会刷新当前的分页table的值
     * 
     * 思路:
          手动提交 pagerForm 这个表单
     * 
     * 确保 id=pagerForm  的表单存在,参考:
     * ====================================================================================
     * <form id="pagerForm" style="display:none;" 
     *             action="permission/list" method="get" οnsubmit="return navTabSearch(this);">
     *        <input type="hidden" name="page" value="1" /><!--【必须】value=1可以写死-->
     * </form>
     * ------------------------------------------------------------------------------------
     * 修改action为相应的地址即可
     * ====================================================================================
     * 
     * 3.修改弹出的dialog回调函数的声明:
     *     <form name="form1" method="post" action="permission/add"  
     *         οnsubmit="return validateCallback(this, dialogAjaxDone_fresh);">
     * 
     *  将原来的 dialogAjaxDone 改成下面的函数名即可。
     * 
     * @param {Object} json
     */
    function dialogAjaxDone_fresh(json){
        DWZ.ajaxDone(json);
        if(json.statusCode==DWZ.statusCode.ok){
            $("form[name="+json.navTabId+"_pageForm]").submit();
            $.pdialog.closeCurrent();
        }
    }
    
    /**
     * 重写 navTabAjaxDone方法
     * 
     * @param {Object} json
     */
    function navTabAjaxDone(json){
        DWZ.ajaxDone(json);
        if(json.statusCode==DWZ.statusCode.ok){
            if(json.navTabId){
                //先判断当前的nav是否有 pagerForm,
                //有,就刷新这个nav 中的分页控件
                var $pageForm = $("form[name="+json.navTabId+"_pageForm]");
                if($pageForm){
                    console.log("刷新分页");
                    $pageForm.submit();
                }else{
                    console.log("刷新本Nav");
                    navTab.reloadFlag(json.navTabId);
                }
            }else{
                navTabPageBreak({},json.rel);
            }
            if("closeCurrent"==json.callbackType){
                setTimeout(function(){navTab.closeCurrentTab();},100);
            }else if("forward"==json.callbackType){
                navTab.reload(json.forwardUrl);
            }
        }
    }
然后修改dialog中的回调函数 为我们的新加的函数:
<form name="form1" method="post" action="user/add"  onsubmit="return 
validateCallback(this, dialogAjaxDone_fresh);"></form>
对于 ajaxToDo 形式的交互,不需要修改。
至此,完成。

这篇关于DWZ下ajax后台交互后的分页刷新的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/660666

相关文章

Mybatis-Plus 3.5.12 分页拦截器消失的问题及快速解决方法

《Mybatis-Plus3.5.12分页拦截器消失的问题及快速解决方法》作为Java开发者,我们都爱用Mybatis-Plus简化CRUD操作,尤其是它的分页功能,几行代码就能搞定复杂的分页查询... 目录一、问题场景:分页拦截器突然 “失踪”二、问题根源:依赖拆分惹的祸三、解决办法:添加扩展依赖四、分页

Android Paging 分页加载库使用实践

《AndroidPaging分页加载库使用实践》AndroidPaging库是Jetpack组件的一部分,它提供了一套完整的解决方案来处理大型数据集的分页加载,本文将深入探讨Paging库... 目录前言一、Paging 库概述二、Paging 3 核心组件1. PagingSource2. Pager3.

RabbitMQ消息总线方式刷新配置服务全过程

《RabbitMQ消息总线方式刷新配置服务全过程》SpringCloudBus通过消息总线与MQ实现微服务配置统一刷新,结合GitWebhooks自动触发更新,避免手动重启,提升效率与可靠性,适用于配... 目录前言介绍环境准备代码示例测试验证总结前言介绍在微服务架构中,为了更方便的向微服务实例广播消息,

MySQL深分页进行性能优化的常见方法

《MySQL深分页进行性能优化的常见方法》在Web应用中,分页查询是数据库操作中的常见需求,然而,在面对大型数据集时,深分页(deeppagination)却成为了性能优化的一个挑战,在本文中,我们将... 目录引言:深分页,真的只是“翻页慢”那么简单吗?一、背景介绍二、深分页的性能问题三、业务场景分析四、

Golang如何用gorm实现分页的功能

《Golang如何用gorm实现分页的功能》:本文主要介绍Golang如何用gorm实现分页的功能方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录背景go库下载初始化数据【1】建表【2】插入数据【3】查看数据4、代码示例【1】gorm结构体定义【2】分页结构体

Mybatis的分页实现方式

《Mybatis的分页实现方式》MyBatis的分页实现方式主要有以下几种,每种方式适用于不同的场景,且在性能、灵活性和代码侵入性上有所差异,对Mybatis的分页实现方式感兴趣的朋友一起看看吧... 目录​1. 原生 SQL 分页(物理分页)​​2. RowBounds 分页(逻辑分页)​​3. Page

SpringCloud使用Nacos 配置中心实现配置自动刷新功能使用

《SpringCloud使用Nacos配置中心实现配置自动刷新功能使用》SpringCloud项目中使用Nacos作为配置中心可以方便开发及运维人员随时查看配置信息,及配置共享,并且Nacos支持配... 目录前言一、Nacos中集中配置方式?二、使用步骤1.使用$Value 注解2.使用@Configur

如何更改pycharm缓存路径和虚拟内存分页文件位置(c盘爆红)

《如何更改pycharm缓存路径和虚拟内存分页文件位置(c盘爆红)》:本文主要介绍如何更改pycharm缓存路径和虚拟内存分页文件位置(c盘爆红)问题,具有很好的参考价值,希望对大家有所帮助,如有... 目录先在你打算存放的地方建四个文件夹更改这四个路径就可以修改默认虚拟内存分页js文件的位置接下来从高级-

使用nohup和--remove-source-files在后台运行rsync并记录日志方式

《使用nohup和--remove-source-files在后台运行rsync并记录日志方式》:本文主要介绍使用nohup和--remove-source-files在后台运行rsync并记录日... 目录一、什么是 --remove-source-files?二、示例命令三、命令详解1. nohup2.

MyBatis分页插件PageHelper深度解析与实践指南

《MyBatis分页插件PageHelper深度解析与实践指南》在数据库操作中,分页查询是最常见的需求之一,传统的分页方式通常有两种内存分页和SQL分页,MyBatis作为优秀的ORM框架,本身并未提... 目录1. 为什么需要分页插件?2. PageHelper简介3. PageHelper集成与配置3.