基于tablePlug.js设置复选框选中状态记忆后,全选取值的问题。

讨论 已结 4 900
肥喵叔叔
肥喵叔叔 2018-11-3
悬赏:20飞吻
首先非常感谢@岁月小偷,
正好开发中遇见了需要记忆复选框状态的问题。
然则,前期写了通过点击复选框,及全选按钮,获取单条数据内的某一个值,进行计算:

经测试无论单击复选框,还是点击全选,没问题;
后增加了记录复选框状态的JS:

出现了点击全选时,获取不到数据的问题,如果将该JS代码注释掉,则完全没有问题。
不知道各位有没有遇见过类似的问题,如何解决的呢?
回帖
  • 嘿嘿,自己的劳动成果能派上用场哈,然后你这个问题,先分析一下问题,后面给你对策额。
    出现这个问题是因为我重新了checkstatus的方法,如果是有记忆模式的,它返回的是如下面图片的结构
    里面的data实际已经跟原始的结构不一样了,如果设置是不记忆的,它返回的data还是以前的结构,因为记忆的话实际上会出现一个问题是,如果页面是分页的,里面保存的如果是原始的数据的话实际在后面会遇到很多很多的问题,比如开启了edit,那么修改之后应该也同步到这个记忆里面,还有选得多的话也会非常庞大,所以目前这个data里面是记忆了一个三种状态的主键集合,一个是原始的就是default的,一个就是原来没有的后面选上的,还有一个就是原来有的后面被取消的;然后isAll还是以前的逻辑,也就是说当前页面如果全选了就是true,如果当前页面不是全选就是false。
    然后是你遇到的问题,你是监听复选框,然后all的情况下要去得到当前页面选中的数据,是通过table.checkstatus这个方法去得到当前选中的,引入了我的plug之后开启记忆了这个逻辑就有问题了。
    解决方案,实际上你监听到点击的是全选按钮,不管是全部选上或者全部不选,要得到当前页面的所有数据,可以通过table.cache【tableId】这个去得到,这个会比table.checkstatus这个方法更好,因为它不仅仅只有在全选的时候用,也可以在取消全选的时候得到所有的数据。建议你试试看额。
    0 回复
  • 不过也可以我这边稍微调整一下,让它table.checkStatus返回的data还是以前的,然后我把我的状态放在另外一个属性,比如叫做status里面回来,我觉得这样可能会对以前的代码影响更小,非常感谢你的反馈哈,让我意识到这个问题可以进一步的完善,不过我也建议你试试上面那条回复的对策额,我觉得那个可能会更加方便一些,我现在正在处理智能重载的,一会顺便把这个table.checkStatus顺带的给完善一下再pull到gitee上。
    0 回复
  • @岁月小偷 [嘻嘻] 好的,我试一试你说的上面那个方法,谢谢啊。
    0 回复
  • @肥喵叔叔 嗯嗯,不客气。到时候我会把它修改成这样子的返回,这样子就不会对以前的代码逻辑造成影响了。也谢谢你的反馈哈。[嘻嘻]
    0 回复