表格数据更改,平常包括几个内容:新增、修正、删除、挪动,开辟中常常会面对的一个题目就是更改以后怎样将数据同步到节点上,一向以来个人的提议照样应用表格重载,不管是url情势的照样data情势的实际都是须要重载,url重载自然会从新请求背景获得最新的数据,data情势平常就是对data的操纵,以后从新以新的data去衬着出来。

同时会斟酌的是怎样只管削减请求,可以以为最深的就是update操纵,为了要更新这一条纪录而重载全部表格,请求一遍数据以为划不来,那末平常来讲就可以应用表格的tool事宜中的obj.update这个要领去更新。

不过细致运用中就会发明其诸多的不足的处所,本文就是主要针对这些不足举行一个处置惩罚给出一个tablePlug.update的要领,然后进而衍生出add和remove和move,同时新增了更新统计行数据的要领。

测试页面: 综合测试页面 流加载表格测试页面 定时革新表格测试页面

一、update

正如上面说的obj.update(data)有诸多限制,长处上来讲就是用最小的修正价值,完成了数据的更新,他就更新参数中的data中的键的数据,不会全部行更不会全部table的节点更新;缺点是底层的完成逻辑有点题目:

1、是经由过程遍历data,更新缓存cache中对应的纪录的key的value,然后依据cols的设置信息更新td的内容,然则假如是想要更新toolbar列的话就没戏,现在剖析的只需templet的,所以假如想要更新toolbar的话基础就只能设置成templet,而且要给这个列增加一个field,才有理论上的可以。

2、toolbar列纵然加了field改成templet也未必能更新过来,由于内部的完成逻辑是先推断原始的data是不是有这个key,所以假如field定名是原始的data内里没有的,背面用obj.update也更新不进去的,这个是一个比较大的限制。

由于拿我们项目来讲,背景给我们的数据假如原始的纪录内里没有这个key的值他不会给一个key: ”的,那末背面要想应用obj.update这个key就变得不可以,除非应用parseData在衬着之前对背景给的数据做一个人工的初始化把对应的key增加上,然则可想而知有多贫苦。

3、数据他是一个一个更新进去,然后更新一个值就更新对应的td,然则这个就存在别的一个风险了,就是遍历对象他是无序的,比方update{a: 1, b:2},假如a字段的cols中会用到b字段的值做一个处置惩罚再显现出来。

那末假如遍历递次是先更新a的值,然后就最先更新a的td的内容,这个时刻cache中b的值照样旧的不是你要更新进去的2,比及更新了b字段了他又不能说检测到其他字段有运用了这个字段会去再次更新对方的内容,这就致使了a出来的结果照样错的。

4、更新了统计列的某一个值统计行的对应数据没有从新盘算。

总结的来讲就是,obj.update完成的照样太甚理想化太甚简朴,一条纪录从数据上来讲每一个key是自力的这个没什么题目,然则到页面显现就不然了,由于页面的内容它不一向是单个字段的简朴值显现,还会举行一些特别处置惩罚。

所以须要一个templet来转化,来自定义,所以有可以一个td内里会用到多个字段这个很正常,东西列的按钮也会依据数据的状况去决议部份按钮是不是显现等等。

所以个人认为要更新这个数据不能是一个自力的小单位的更新,而是先update这一行的数据然后在update这一行,而不是遍历被update的key一个个更新,再往大了看,实际这个表的纪录也是一个团体。

也是不能说你改了这条纪录其他的纪录必定是稳定的,不消除某个字段的td他会依据当前页面的同一个field做了什么处置惩罚实际,比方统计行,所以现在的思绪就是直接将值先update到cache中,然后再挪用table内部的衬着tr td的内容。

大抵的代码:

前面是针对参数做了一些处置惩罚让参数越发天真,最症结的是后半部份的更新cache的部份,还要一个最症结的renderData的要领:

他的作用就是将cache中的数据从新剖析衬着一遍,同时针对是不是是挪动数据另有默许点击那一条纪录的处置惩罚,然则中心是衬着cache,挪用table.js内部的renderData。

运用场景:

1、晓得当前编辑修正的是那一条纪录,可以看看一个最常常使用的场景就是点击编辑弹出一个form然后修正提交,完成以后愿望只管不要从新请求接口更新到data和页面中去,

gif很不好录,本身运用测试的例子内里的编辑按钮测试结果即可

挪用的更新数据的情势是:

tablePlug.update(表格实例的id, 当前tr的index, newData)

2、不晓得当前的trIndex的情况下update某一条纪录的话,必需有一个限制就是必需是有主键的表格,而且更新的数据中必需包括主键的字段,不然你也不晓得更新的究竟是哪条纪录。

tablePlug.update('demo', {id: 10002, username: '贤心'});

3、一次性更新多条纪录,这个参数trIndex就没有意义了,加了也没用,由于是更新多条纪录,所以可以这么写

tablePlug.update('demo', [{id: 10002, username: '贤心'}, {id: 10006, username: '小偷', age: 18, sign: '大叔'}]);

这个测试页面可以看看头部toolbar中的“积分清零”另有“女性积分加100”这两个测试按钮以及背地的事宜实行的要领

4、越发率性的,只需传入一个tableId,update会将当前根据cache中的数据给衬着一次,这个是异常有用的,比方假如你以为我update中的逻辑针参数对cache的修正的逻辑不满意可以本身用本身以为更好的要领去处置惩罚cache,末了实行一下tablePlug.update(‘demo’)就好了,供应更高的自在度,和拓展的可以性。

二、addData

addData增加的纪录是已请求接口完成返回的数据纪录,本质上来讲就是不一样的,所以不要殽杂。

细致addData的代码:

data情势的话,实际也是往data内里增加一些纪录,然后也是再reload一下。

// 增加单条纪录:

tablePlug.addData ('demo', {id: newId, username: '甲'});

// 增加多条纪录

tablePlug.addData ('demo', [{id: newId1, username: '乙'},{id: newId2, username: '丙'}]);

关于addData的有一个比较综合的例子可以看看应用table的data情势怎样跟流加载合营运用,弄成一个流加载的表格

https://sun_zoro.gitee.io/layuitableplug/testTableFlow

三、del

新增和删除实际个人提议照样reload比较稳妥,不管是url照样data情势都是,所以删除对应的处置惩罚方式也跟新增实际差不多,只不过删除贫苦一点的就是data情势要在原始的纪录内里去删除指定的纪录。

而且有可以开启了复选的状况影象删除了就要将关于他的状况给调解一下;照样为了运用更轻易,参数一样做了处置惩罚,

1、删除指定的下标的数据,可以检察表格行的toolbar中的删除按钮的监听处置惩罚,然则注重,假如表格是url的情势,现在测试页面写的都是json文件,所以reload也不会有结果的。

所以要测试请在data情势的测试,不必纠结这个,url的假如是实际的效劳接口的话是背景返回数据,平常删除胜利了背面查询是不会再出来的,除非背景接口有题目。

2,删除指定的一些纪录,这个平常有两种情势,然则请求一样就是必需是有主键的表格

// id鸠合

tablePlug.del('demo', [1,2,3,4]);

// 对象数组

tablePlug.del('demo', [{id: 1, name: 'name1'}, {id:2}, {id:4}]);

依据获得哪一种数据比较轻易就用哪一种情势,可以参考测试页面的批量删除的处置惩罚方式

四、move

这个处置惩罚基础跟update差不多,将数据在cache中调解位置,然后挪用一下组件内部的renderData的要领让他从新衬着出来就好

然后为了运用轻易衍生出来一个上移跟下移的要领

结果

理论上应用一些拖拽事宜或许其他的插件在事宜中挪用一下tablePlug.move(‘demo’, form, to);就可以完成递次的恣意转变了

限制:注重!这个只是针对数据挪动,不会有单条数据纪录的更改,假如原始的数据内里有点击了排序,那末挪动以后默许是会去掉这个排序的状况了的,由于挪动以后极可以就不能满足当前的排序划定规矩了,所以提议在运用挪动的时刻不要跟sort搭配,假如有sort而且所谓的挪动是会提议请求转变数据的,那末这个提议照样运用请求接口获得两个新的数据然后用update去更新他们的位置。

五、renderTotal

在纪录更新以后,假如存在统计行有须要统计的列,那末值平常也要随着变,别的一个越发主要的作用就是可以自定义统计划定规矩,而不是自带的乞降,可以自定肯定盘算的函数,或许可以直接相似templet一样的去自定义返回的内容,包括异步的去读取想要显现的数据。

代码也许以下:

从完成代码可以看出就是给cols的字段设置新增一个totalFormat的设置,可以设置一个划定规矩假如不设置的话就是sum(现在也只是增加了sum,其他的划定规矩背面会到场或许本身到场,比方均匀。

最大最小不过个人以为主要意义是可以自定义要领,这个才是有用常常使用的),也可以设置一个要领,假如不是异步的可以直接把结果返回,假如是须要异步的那末也可以在获得终究想要的结果的时刻实行:

tablePlug.renderTotal(tableId, field, res);

比方下面的:

日常平凡有用的话不是都要本身去挪用的,在插件内部已在renderDone回调内里会去实行他了:

参数也是比较自在,差别的组合会有差别的结果,

// 触发更新某个表格的一切列的统计数据

renderTotal(tableId);

// 触发更新某个表格的某个字段的数据

renderTotal(tableId, fieldName);

// 更新某个表格的某个字段的统计数据为value

renderTotal(tableId, fieldName, totalValue);

六、refresh

之前做过一个智能reload的修正,即在实行table.reload的时刻会依据传过去的option来推断只是从新请求数据照样须要重载一下,个人以为结果可以了。

不过关于有强迫症(有寻求)的小伙伴来讲,在一些场景下照样不够好,就是那些定时革新的,表现就是一方面滚动条会回到top:0,left:0,另有其他的比方鼠标在操纵分页组件的时刻会以为落空核心,新增一个tablePlug.refresh来试一试可否满足请求。

先看结果:

事宜背地做的事变:

表格config:

背地的完成思绪

修正table的Class.prototype.pullData支撑refresh情势

renderData的时刻依据是不是refresh去做一些细节的处置惩罚,另有一个限制就是返回的数据中关于总数应该是稳定的,假如发生了转变,那末照样会renderData,会从新衬着page组件。

别的一个限制就是这类refresh的表格不提议再加什么按钮呀edit呀,由于它一向会在变,基础主要就是用来做一个纯真用来显现用的表格,比方一些常常变化的数据,接见人次,股票动态之类的。

运用:

// 启动表格demo的自动革新功用,500毫秒一次

tablePlug.refresh('demo', 500);

// 作废表格demo的自动革新

tablePlug.refresh('demo', false);

// 住手一切已开启自动革新的表格的自动革新

tablePlug.refresh(false);

更多layui框架学问请关注layui运用教程。

以上就是layui表格数据更改的一种处置惩罚方式的细致内容,更多请关注ki4网别的相干文章!

layui表格更改一列数据_【WEB前端开辟】layui表格数据变动的一种处理方式相关推荐

  1. layui table 每列加标签_【前端】layui表格中根据条件给对应的列加背景色

    [前端]layui表格中根据条件给对应的列加背景色 [前端]layui表格中根据条件给对应的列加背景色 1.效果(根据条件动态给表格加背景色) 2.代码: 在我自己的项目中,由于条件比较多,提取出了一 ...

  2. Web 前端框架 Layui

    Web 前端框架 Layui 1. 模块化前端框架 Layui 2. 在 Web 项目中引入 Layui 框架 3. 网页轮播特效 4. 表格模块和分页模块的使用 1. 模块化前端框架 Layui L ...

  3. 云中数据_免费备份和共享云中数据的最佳网站

    云中数据 We've been told many times how important backups are, although we may not realize it until it's ...

  4. web前端埋点及数据上报

    web前端埋点及数据上报 简介 前端埋点即在产品客户端获取用户行为和使用情况的一种监控方式.通过埋点可以获取到用户行为数据,借助这些数据,我们可以从用户角度出发,升级迭代产品,使其更加贴近用户使用习惯 ...

  5. Java_Hive自定义函数_UDF函数清洗数据_清洗出全国的省份数据

    Java_Hive_UDF函数清洗数据_清洗出全国的省份数据 最近用Hadoop搞数据清洗,需要根据原始的地区数据清洗出对应的省份数据,当然我这里主要清洗的是内陆地区的数据,原始数据中不包含港澳台地区 ...

  6. web前端-01:关于css居中的几种方法

    web前端-01:关于css居中的几种方法 在学习web前端的过程中,居中问题应该算得上是个比较经典的问题了吧,关于居中的方法也有很多,总结一下我自己比较喜欢用的几个方法. 1 利用 ...

  7. index加载显示servlet数据_[WEB篇]-JavaWeb基础与应用-02-Servlet开发

    JavaWeb基础与应用 2.Servlet开发 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源 ...

  8. css中如何实现帧布局_浅谈web前端中的表格布局与CSS盒子布局

    在web前端设计排版时我们可能会用到表格布局和div+CSS布局,但现在主要使用后者,为何?今天我们来谈一谈两者之间的发展和原理. 话不多说下面来干货 发展过程 上个世纪Web开发人员流行使用表格进行 ...

  9. 怎么给表格加一列序号_(表格的序号怎么顺下来)如何在excel表格填充一列序号列...

    怎么在excel表格前加序号 在excel表格前加序号的方下: 1.打开一Excel文件. 2.如要在A2开始输入序号,点击A2,输开始的序号数,如1001,输入之后,将鼠标移动到A2的右下角. 3. ...

最新文章

  1. 在微信小程序的JS脚本中使用Promise来优化函数处理
  2. 《第一行代码》学习笔记19-广播接收器Broadcast_Receiver(2)
  3. 2019北京高考分数分布一览表(成绩分布统计)
  4. 探讨Redhat的开源“成功之道”
  5. noip2008普及组4题题解-rLq
  6. mysql 导致iis 假死_解决IIS无响应假死状态
  7. 【笔记】用正则匹配字符串的方法摘抄
  8. dubbo:reference、dubbo:service和@Service、@Reference使用情况
  9. 条件过滤(商品名称、价格以及商品类别的查询)
  10. Unity4.3 2D新特性
  11. copy 自定义对象
  12. jsp实现购物车结算页面
  13. python如何让文字竖排输出_html中如何让文字竖排显示?总结实现文字竖排样式的多种方法...
  14. js常用工具类(1)
  15. 【菜鸟C++学习杂记】ASCII码转换和显示
  16. 面试官问了四个问题,总结了4个经验
  17. html引入第三方库,基于webpack实现多html页面开发框架七 引入第三方库如jquery
  18. Im4java + ImageMagick 缩略图补白加边
  19. mysql迭代器_迭代器是什么,C++ STL迭代器(iterator)用法详解
  20. python 绘制箱型图

热门文章

  1. 营销策划书(2007)
  2. 图示虚拟机virtualbox在Ubuntu下的安装使用
  3. 美国五名议员因新冠病毒“自我隔离”,至少两人曾与特朗普“接触”
  4. linux如何查看python的版本_linux怎么改python默认版本
  5. Jsoup+JavaMail实现自动投票,验证邮箱功能
  6. 超快捷还原达梦数据库dmp
  7. 压缩算法比较: Gzip vs Bzip2 vs LZMA vs XZ vs LZ4 vs LZO
  8. 手机wap和html有什么区别,解析WEB和WAP之间有什么区别
  9. 元旦立下的Flag,春节后该如何实现?
  10. matlab如何循时将上一次运行出的结果带入下一次的运算,关于怎么把 for的上一次计算结果代入下一次循环的初始值问题...