jquery-easyui本身没有提供列锁定/解锁的接口,并且其原有的列隐藏/显示在符合表头的情况下会出现错位,我在项目中遇到了这两个问题,在参考了网上许多解决方案后,编写了一个拓展插件,基本上解决了这两个问题。

解决问题的思路

网上很多人都是通过拓展和复写easyui原有的方法来对html进行操作,这种方法基本上能解决问题,但是我却纠结与后续升级的问题-万一下个版本的easyui页面结构变了咋办?

为了解决这个问题,我使用了一种取巧的办法:

    var refactorView = function(target,opts){
if(!opts){return;}
var t = $(target);
var data = t.datagrid('getData');//获取当前数据
var url = opts.url;//获取url
opts.url='';//清空url避免重新请求服务器
t.datagrid(opts);//重构表格布局
t.datagrid('loadData',data);//加载数据
t.datagrid('options').url = url;//恢复请求服务器能力
};
$.extend($.fn.datagrid.methods,{
/*refactor view&&unrelod data 重构视图&&不重新加载数据*/
refactorView:function (jq, option) {
return jq.each(function () {
refactorView(this, option);
});
}
});

拓展的这个方法很简单,作用是在不重新请求远程数据的前提下重构当前的页面结构。

之后需要做的事情就很简单了,在用户执行锁定/解锁、隐藏/取消隐藏等操作的时候,直接通过js改变options的结构,然后重新渲染视图就ok了。

当然这里面还涉及到对操作的存储等问题,简单说下具体细节:

在第一次执行锁定/解锁、隐藏/取消隐藏操作时,我会给option中的columns和frozenColumns中的columnOption增加一个属性coordinate

arrayUtil.each(frozenColumns,function(level,line){
arrayUtil.each(line,function(index,columnOption){
columnOption.coordinate = {
level:level,
index:index,
preIndex:index>0?index - 1:-1
};
});
});

这样一来所有的列都有了唯一的坐标,不论我对这些列怎么操作,最后都能根据这个坐标将其恢复

http://download.csdn.net/detail/tianxiawudi0720/8986419

附上源码(另:由于时间问题,复核表头的子表头在锁定的时候只是简单的把他移动到锁定列里了,有兴趣可以参考隐藏/显示列的功能把这块儿补全,代码位置如下图:)

【jquery easyUI 拓展的更多相关文章

  1. MVC 使用Jquery EasyUI分页成功

    先上图吧

  2. 第二百一十五节,jQuery EasyUI,DateBox(日期输入框)组件

    jQuery EasyUI,DateBox(日期输入框)组件 学习要点: 1.加载方式 2.属性列表 3.事件列表 4.方法列表 本节课重点了解 EasyUI 中 DateBox(日期输入框)组件的使 ...

  3. 套用JQuery EasyUI列表显示数据、分页、查询

    声明,本博客从csdn搬到cnblogs博客园了,以前的csdn不再更新,朋友们可以到这儿来找我的文章,更多的文章会发表,谢谢关注! 有时候闲的无聊,看到extjs那么肥大,真想把自己的项目改了,最近 ...

  4. Jquery EasyUI 开发实录

    有好几年没有用过EasyUI了,最近在外包做的一个项目中新增功能时,又用到了,本以为和按照以前那样用就可以了,可当我真正用的时候,发现许多地方不一样了,就连官网的文档都更新了,最突出的就是不知道什么时 ...

  5. jQuery UI与jQuery easyUI的冲突解决办法

    jQuery UI与jQuery easyUI都是基于jQuery开发的.难免里面会有些方法名冲突! 因此对jQuery.easyui其中的两个方法名:resizable 和 draggable进行替 ...

  6. jquery easyui 动态绑定数据列

    function doSearch2() { var strsql = $('#sssql').val(); $.ajax({ url: "../HttpHandler/DownloadHa ...

  7. jquery easyui使用(四)······添加,编辑,删除

    前端: <div style="font-size: 25px; font-weight: 700; margin: 50px 0 10px 10px;"> 车辆登记 ...

  8. jquery easyui使用(二)······可折叠面板动态加载无效果

    先上代码: <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"& ...

  9. jquery easyui使用(一)······可折叠面板的布局,手风琴

    <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> &l ...

  10. jquery easyui菜单树显示

    目前做了一个easyui项目需要显示多级菜单,菜单配置到数据库中,因此每级菜单都需要到数据库中取,用了jQuery EasyUI方便多了. 效果体验:http://hovertree.com/texi ...

随机推荐

  1. Gateway服务网关 (入门到使用)

    Gateway服务网关 Gateway也要作为微服务注册到nacos中 Zuul也是网关但比较老是一种阻塞式编程:Spring Cloud Gateway 是 Spring Cloud 的一个全新项目 ...

  2. C-01\编译器和链接器以及真正的入口函数

    编译器: 工具 编译器 路径 VC++6.0 CL.EXE(一段shell)只负责分析命令行参数,真正功能实现在C1.DLL.C1XX.DLL.C2.DLL C:\Program Files (x86 ...

  3. concurrent.futures之ThreadPoolExecutor python线程池代码实现方法

    from concurrent.futures import ThreadPoolExecutor def main(i): print(i) THREAD_NUM = 20 # 线程数 with T ...

  4. 树莓派读取ip

    # -*- coding:utf-8 -*- #@author:YouLei #@time:2020/05/27=11:20 import time import socket time.sleep( ...

  5. keypoint数据结构

    公有属性 (float)angle:角度,表示关键点的方向,-1为初值. (int)class_id:当要对图片进行分类时,我们可以用class_id对每个特征点进行区分,未设定时为-1,需要靠自己设 ...

  6. 机器学习-集成学习LightGBM

    目录 前言 介绍LightGBM LightGBM的背景和起源 LightGBM的优点和适用场景 LightGBM的基本工作原理 安装和配置LightGBM 安装LightGBM 配置LightGBM ...

  7. [代码审计基础 03]-RCE-fork,system,execve

    RCE-fork,system,execve 简单来讲: 数据流进入了控制流 紧紧抓住输入 不同数据层的交汇处,往往是漏洞点 远程代码执行 PHP eval() assert() preg_reple ...

  8. [EULAR文摘] 超声腱鞘炎对RA早期诊断的价值

    超声腱鞘炎对RA早期诊断的价值 Sahbudin I, et al. EULAR 2015. Present ID: OP0015. 背景:为了预测早期未分化疾病发展为类风湿关节炎(RA), EULA ...

  9. LeetCode 周赛 334,在算法的世界里反复横跳

    本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 提问. 大家好,我是小彭. 今天是 LeetCode 第 334 场周赛,你参加了吗?这场周赛考察范围比较基础,整体 ...

  10. 目标库DML 堵塞(dblink)导致OGG延迟

    [[toc]] # 问题概述xx库OGG延迟超过8个小时,但进程处于RUNNING.# 问题原因定位到有人通过A库的DBLINK修改目标库的数据. OGG同步的表, 目标的端也在做修改相同数据,无法保 ...