zoukankan      html  css  js  c++  java
  • easy ui 零散技巧

    0、datagrid无数据样式提示

     思路一:css伪类选择器,找到无数据的table通过:empty 样式实现无数据提示(配合::before伪对象实现),想法是美好的,现实是无奈的,如图

      

      easyui datagrid即使无数据时,依然存在一行(行无数据且不可见),:empty方案被放弃。

      思路二:区分出空数据的行和只有一条数据的行,对比发现class是否为空(包括treegrid),css代码如下:

    .datagrid-view2 .datagrid-btable tbody > tr[class='']::before {
        position: absolute;
        content: 'No Data';
        display: flex;
        width: 100%;
        height: calc(100% - 45px);
        padding-left: calc(50%);
        align-items: center; 
    }

      效果如下:

       

      汉化:在easyui-lang-zh_CN.js最末加上如下代码即可:

      

    0.1、datagrid无loading式更新数据

    // update 方式更新table
    function updateTable(tb,p) {
        var mrTb = tb;
        if (mrTb && mrTb.length) {
            var opts = mrTb.datagrid('options'),
              params = {
                page: opts.pageNumber,
                rows: opts.pageSize,
                order: opts.sortOrder,
                sort: opts.sortName
              },
              idField = opts.idField;
              if (opts.onBeforeLoad) opts.onBeforeLoad(params);
              // 合并所以查询条件
              if(p) {
                  $.extend(params, p);
              }else {
                  $.extend(params, opts.queryParams);
              }
              // 抓取数据更新table
              $.post(opts.url, params, function(data) {
                if (data && data.rows) {
                  var rows = mrTb.datagrid('getRows'),
                    srows = mrTb.datagrid('getSelections').map(function(item) {
                      return item
                    });
                  var rowLength = rows.length;
                  
                  /* start */
                  var newLength = data.rows.length;
                  if(rowLength <= newLength) {
                      for(var i=0;i<newLength;i++) {
                          if(i<=rowLength) {
                              mrTb.datagrid('updateRow', {index: i, row: data.rows[i]});
                          }else {
                              mrTb.datagrid('appendRow', data.rows[i]);
                          }
                      }
                  }else {
                      for(var i=0;i<rowLength;i++) {
                          if(i<=newLength) {
                              mrTb.datagrid('updateRow', {index: i, row: data.rows[i]});
                          }else {
                              mrTb.datagrid('deleteRow', i);
                          }
                      }
                  }
                  /* end */
                  
                  srows.map(function(row) {
                    mrTb.datagrid('selectRecord', row[idField]);
                  });
                  mrTb.datagrid('resize');
                }
              }, 'json');
        }
    }

    1、Jquery带上下文查找:

     格式:$(selector,context)

     例如:$("input",window.document),查找当前文档下的说有input元素,也等价于$("input",null)或者$("input");

        $("input",$("div.target")),查找class为“target”的div里的所有input元素;

    2、隐藏tab:

    $(fucntion(){
      var ctab = $('#tabs').tabs('getTab', 'title1').panel('options').tab;
      ctab.hide();
    });

    3、模态dialog,页面有滚动条时,弹出dialog后,隐藏的区域闪烁问题处理:

    .window-mask{
       height: 100%;
       position: fixed;
    }

    即覆盖原遮蔽层样式的‘position’属性就行(原属性 - position:absolute)

    4、分页信息NaN处理

    如图:

    代码:data-options="singleSelect:true,
               nowrap:true,
               rownumbers:true,
               pagination:true,
               pageSize: 5,
               pageList:[5]">

      当中的pageSize,pageList等记得给个默认值哦,当然像ie这个不友好的浏览器,还是加上默认值比较好。

    5、Jquery判断元素显示隐藏:display属性状态值

    很多时候,我们都要判断元素当前是否处于显示或隐藏状态。Jquery通过判断元素display属性状态值来实现“判断当前操作元素是否显示还是隐藏”,实现方法主要使用Jquery提供的基本选择器 :visible 或 :hidden方法。

    <script type="text/javascript">
     function checkStatus(){
       if($('.test').is(':visible')){
             alert("注意:'.test'被隐藏了!");
         }else{
           alert("'.test'显示,能看见');
           }
    //用基本选择器 :hidden 也行
    //    if($('.test').is(':hidden')){
    //      alert("'.test'显示,能看见');
    //    }else{
    //      alert("注意:'.test'被隐藏了!");
    //    }
      }
    </script>

     6、datagrid 自动换行:

    <table class="easyui-datagrid"
         data-options="url:'datagrid_data2.json',
              fitColumns:true,
              nowrap:false,
              autoRowHeight:true">

    记住是三个属性同时具备哦,因为啥?(如若不加这三个,范二的IE会让你痛不欲生)还是兼容性问题啦O(∩_∩)O

    7、confirm确认框去掉【关闭】等按钮

    $.messager.confirm({

        title:'提示',
        msg:'提示的内容...',
        closable:false,  // 关闭按钮
        collapsible:false, // 收缩按钮
        minimizable:false,
        maximizable:false,
        fn:function(r){

        }
    });

    8、datagrid 加载数据后、渲染前变更数据

    loader:如何从远程服务器加载数据

    <table class="easyui-datagrid"
                data-options="url:'datagrid_data1.json',success:process,
                    loader:function(param,success,error){
                        var that = $(this); 
                        var opts = that.datagrid('options'); 
                        if (!opts.url) { return false; } 
                        $.ajax({ 
                            type : 'POST',
                            url : opts.url,
                            data : param,
                            dataType : 'json',
                            success : function(data){//process 是自定义的数据处理方法
                                if(opts.success) try{ opts.success(data); }catch(e){}
                                success(data);
                            },
                            error : error
                        });
                }">
    ... ...

    <script type="text/javascript">
    function process(data){
      if(data && data.rows){
        $.each(data.rows,function(index,item){
          item.xxx = '***';//修改相关属性
          ... ...
        });
      }
    }
    </script>

     

    9、给时间框控件扩展一个清除的按钮

    /**
     * 给时间框控件扩展一个清除的按钮
     */
    $.fn.datebox.defaults.cleanText = '清空';
    
    (function ($) {
        var buttons = $.extend([], $.fn.datebox.defaults.buttons);
        buttons.splice(1, 0, {
            text: function (target) {
                return $(target).datebox("options").cleanText
            },
            handler: function (target) {
                $(target).datebox("setValue", "");
                $(target).datebox("hidePanel");
            }
        });
        $.extend($.fn.datebox.defaults, {
            buttons: buttons
        });
    
    })(jQuery)

    10、datagrid 分页自动选中

    在easyui datagrid设置

    idField:"主键字段名" ,你会发现选中状态就会保持得住,不用做任何编码。

     11、datagrid fitColumns:true 时,表格小于指定宽度取消自适应

    onResize: function(width,height){
       var cNames = $("#tb").datagrid('getColumnFields');/* 所有的头列名 */
       $.each(cNames,function(index,item){
        /* 设置列属性fixed:true,则fitColumns:true失效 */
    var cOptions = $("#tb").datagrid('getColumnOption',item); if(width - 600 < 0) cOptions.fixed = true; else cOptions.fixed = false; }); $("#tb").datagrid('fitColumns'); }

     另一种场景:

    onLoadSuccess:function(data){
       //console.log($(this).datagrid(''));
       var cNames = $("#tb").datagrid('getColumnFields');
       $.each(cNames,function(index,item){
           var cOptions = $("#tb").datagrid('getColumnOption',item);
        if(cNames.length<8){// 自适应   cOptions.auto
    = false;   cOptions.width = 10;
          delete cOptions.fixed;
        }else{
          cOptions.auto = true;
          cOptions.fixed = true;
          delete cOptions.width;
        } }); $(
    "#tb").datagrid('fitColumns'); }

    12、datagrid getChecked,选择了多行结果只返回一条数据

      a: idField属性设置不对,如设置成了一个不存在的属性

    13、datagrid pagination,按钮控制定义

      分页控件布局定义。(该属性值自1.3.5版开始可用)
      布局选项可以包含一个或多个值:
      1) list:页面显示条数列表。
      2) sep:页面按钮分割线。
      3) first:首页按钮。
      4) prev:上一页按钮。
      5) next:下一页按钮。
      6) last:尾页按钮。
      7) refresh:刷新按钮。
      8) manual:手工输入当前页的输入框。
      9) links:页面数链接。

    示例代码:

    $('#pp').pagination({
    	layout:['first','links','last']
    });

    14、tree,叶子节点显示为目录问题

      data: [{

          "id":"0",

          "text":"功能权限",

          "children":[

            {"id":"1","text":"首页","children":[],"state":"open"},

            {"id":"1","text":"导航","children":[],"state":"close"}

          ]

        }]

      叶子节点带state属性时,会导致叶子节点显示为目录

    15、表格前端排序

    function sortTable(tb){
        var opts = tb.datagrid('options'),
            sortName = opts.sortName,
            sortOrder = opts.sortOrder,
            rows = tb.datagrid('getRows'),
            fns = {
              desc: desc,
              asc: asc
            },
            fmts = {};
        opts.columns[0].map(function(column){
          fmts[column.field] = column.formatter;
        });
        if(sortName){
          var sortRows = rows.map(function(row,index){
            var jrow = $.extend({},row);
            if(fmts[sortName]) {
              jrow['_'+sortName+'_'] = $('<div>'+fmts[sortName](jrow[sortName],jrow,index)+'</div>').text();
            }else{
              jrow['_'+sortName+'_'] = row[sortName];
            }
            return jrow;
          });
          sortRows = sortRows.sort(fns[sortOrder]);
          sortRows.map(function(row,idx){
            tb.datagrid('updateRow',{index: idx,row: row});
          });
        }
        function desc(a,b){
            var val1 = a['_'+sortName+'_']||'',val2 = b['_'+sortName+'_']||'';
            if(val1.toString().toLowerCase() > val2.toString().toLowerCase()){
                return -1;
            }else{
                return 1; //按编码从大到小排列
            }
        }
        function asc(a,b){
            var val1 = a['_'+sortName+'_']||'',val2 = b['_'+sortName+'_']||'';
            if(val1.toString().toLowerCase() < val2.toString().toLowerCase()){
                return -1;
            }else{
                return 1; //按编码从小到大排列
            }
        }
    }
  • 相关阅读:
    INF文件的语法解说转
    VC的拨号上网程序
    sql修复
    flash media server 2 下载 + 无限制序列号
    [原] ASPNET2.0中如何历遍GRIDVIEW
    [net2.0] ASPNET内置安全认证架构 的灵异问题~~~~
    SnagIt的Visual Studio Team System插件
    [翻译]使用HtmlAgilityPack更好的HTML分析和验证
    哪些自动化测试工具支持AJAX
    VSTT Rosario CTP
  • 原文地址:https://www.cnblogs.com/xtreme/p/5051622.html
Copyright © 2011-2022 走看看