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. Idea创建类模板方法模板

    参考https://blog.csdn.net/sdut406/article/details/81750858 写代码是少不了注释的,但是自带的注释就几个,所以使用注释模板添加自定义的注释是个非常好 ...

  2. Ceph RGW误删index对象恢复

    版本 [root@control1 ~]# ceph -v ceph version 14.2.22 (ca74598065096e6fcbd8433c8779a2be0c889351) nautil ...

  3. Downie V4.6.4 for Mac 视频下载工具

    前言 Downie是Mac下一个简单的下载管理器,可以让您快速将不同的视频网站上的视频下载并保存到电脑磁盘里然后使用您的默认媒体播放器观看它们. ![在这里插入图片描述](https://p3-jue ...

  4. java并发AQS中应用:以acquire()方法为例来分析线程间的同步与协作

    谈到java中的并发,我们就避不开线程之间的同步和协作问题,谈到线程同步和协作我们就不能不谈谈jdk中提供的AbstractQueuedSynchronizer(翻译过来就是抽象的队列同步器)机制: ...

  5. STM32F4库函数初始化系列:串口DMA接收

    1 u8 _data1[4]; 2 void Configuration(void) 3 { 4 USART_InitTypeDef USART_InitStructure; 5 DMA_InitTy ...

  6. 【译】.NET 7 中的性能改进(一)

    原文 | Stephen Toub 翻译 | 郑子铭 一年前,我发布了.NET 6 中的性能改进,紧接着是.NET 5..NET Core 3.0..NET Core 2.1和.NET Core 2. ...

  7. ClickHouse使用笔记

    什么是ClickHouse? ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS). 更多说明请参考官网:https://clickhouse.com/docs/zh/ ...

  8. JWT的原理及使用

    目录 JWT的原理及使用 一.什么是JWT? 二.签发认证流程 三.使用方法 1.设置登录接口 2.设置过期事件 3.定制返回格式 4.配置认证类和权限类 5.写登录逻辑 5.配路由 JWT的原理及使 ...

  9. JZOJ 4318. 【NOIP2015模拟11.5】俄罗斯套娃

    题目大意 求逆序对个数小于等于 \(k\) 的排列数 解析 已经做过很多次了,经典得不能再经典的问题 注意本题很卡空间,要用滚动数组 \(Code\) #include<cstdio> u ...

  10. nodemon 实现 TypeScript 项目热部署

    下载安装 ts-node.nodemon: npm i -D ts-node nodemon 配置package.json脚本: "dev": "nodemon --wa ...