zoukankan      html  css  js  c++  java
  • DWZ分页、排序失效小结

    1. 在视图文件中与分页相关的代码段

    1 <form id="pagerForm" method="post" action="w_list.html">
    2     <input type="hidden" name="pageNum" value="1" />
    3     <input type="hidden" name="numPerPage" value="<%= Model.numPerPage %>" />
    4     <input type="hidden" name="orderField" value="<%= param.orderField %>" />
    5     <input type="hidden" name="orderDirection" value="<%= param.orderDirection %>" />
    6 </form>
     1 <div class="panelBar" >
     2         <div class="pages">
     3             <span>显示</span>
     4             <select name="numPerPage" onchange="navTabPageBreak({numPerPage:this.value})">
     5                 <option value="20">20</option>
     6                 <option value="50">50</option>
     7                 <option value="100">100</option>
     8                 <option value="200">200</option>
     9             </select>
    10             <span>条,共200条</span>
    11         </div>
    12         
    13         <div class="pagination" targetType="navTab" totalCount="200" numPerPage="20" pageNumShown="10" currentPage="2"></div>
    14 
    15     </div>
    16 
    17 </div>

    页面如下图所示:

    分页或排序动作会调用到 dwz.ajax.js 中的两个关键脚本方法:

     1 /**
     2  * 处理navTab中的分页和排序
     3  * targetType: navTab 或 dialog
     4  * rel: 可选 用于局部刷新div id号
     5  * data: pagerForm参数 {pageNum:"n", numPerPage:"n", orderField:"xxx", orderDirection:""}
     6  * callback: 加载完成回调函数
     7  */
     8 
     9 function dwzPageBreak(options){
    10     var op = $.extend({ targetType:"navTab", rel:"", data:{pageNum:"", numPerPage:"", orderField:"", orderDirection:""}, callback:null}, options);                    
                        // 参数rel来自于上面第二段代码13行的一个可选属性,用于指定当一个页面内存在有多个表单时,分页操作作用的对象
    11 var $parent = op.targetType == "dialog" ? $.pdialog.getCurrent() : navTab.getCurrentPanel();
                        // 获取到的 $parent 对象为包含 id=“pagerForm” 的 Form 表单
    12 13 if (op.rel) { 14 var $box = $parent.find("#" + op.rel); 15 var form = _getPagerForm($box, op.data); 16 if (form) { 17 $box.ajaxUrl({ 18 type:"POST", url:$(form).attr("action"), data: $(form).serializeArray(), callback:function(){ 19 $box.find("[layoutH]").layoutH(); 20 } 21 }); 22 } 23 } else { 24 var form = _getPagerForm($parent, op.data); 25 var params = $(form).serializeArray(); 26 27 if (op.targetType == "dialog") { 28 if (form) $.pdialog.reload($(form).attr("action"), {data: params, callback: op.callback}); 29 } else { 30 if (form) navTab.reload($(form).attr("action"), {data: params, callback: op.callback}); 31 } 32 } 33 }
     1 /**
     2  * 
     3  * @param {Object} args {pageNum:"",numPerPage:"",orderField:"",orderDirection:""}
     4  * @param String formId 分页表单选择器,非必填项默认值是 "pagerForm"
     5  */
     6 function _getPagerForm($parent, args) {
     7     var form = $("#pagerForm", $parent).get(0);
     8 
     9     if (form) {
    10         if (args["pageNum"]) form[DWZ.pageInfo.pageNum].value = args["pageNum"];
    11         if (args["numPerPage"]) form[DWZ.pageInfo.numPerPage].value = args["numPerPage"];
    12         if (args["orderField"]) form[DWZ.pageInfo.orderField].value = args["orderField"];
    13         if (args["orderDirection"] && form[DWZ.pageInfo.orderDirection]) form[DWZ.pageInfo.orderDirection].value = args["orderDirection"];
    14     }
    15     
    16     return form;
    17 }

    这次在工作中,分页失效的主要原因就是没有将分页排序的几个相关的隐藏表单元素放在 id="pagerForm" 导致在第一个脚本方法中并没有获取到正确的 Jquery 对象 $parent ,从而传递到第二个方法时获取到的 form 变量值为 undefined 

  • 相关阅读:
    Checking Types Against the Real World in TypeScript
    nexus pip proxy config
    go.rice 强大灵活的golang 静态资源嵌入包
    几个golang 静态资源嵌入包
    rpm 子包创建学习
    Rpm Creating Subpackages
    ava 类似jest snapshot 功能试用
    ava js 测试框架基本试用
    The Architectural Principles Behind Vrbo’s GraphQL Implementation
    graphql-compose graphql schema 生成工具集
  • 原文地址:https://www.cnblogs.com/ImaY/p/4036154.html
Copyright © 2011-2022 走看看