easyui datagrid deleteRow(删除行)的BUG!

项目中又用到easyui 的datagrid做数据展示。功能很强大,很实用,但bug也很多。今天这个就够让人头疼。

如图,现在有个删除功能,选中一行,点击就可以删除。

easyui datagrid 提供了deleteRow方法。可以实现删除。

但还是出问题了。

第一次删除后,就会出现,点击一行,但是界面上选择的却是他上面那一行。百思不得其解。

google,baidu,各种搜索,得到的答案都是删除后,然后reload。重新加载数据。

我不想这样做也不可能用户一删除就要重新加载。并且第二次删除的话,行号也跟着乱的一塌糊涂。

这明显又是easyui的bug,于是开始一步步跟踪调试easyui所谓的开源代码(被混淆过)。

一下午的调试发现,easyui是根据datagrid-row-index和datagrid-row-r1-x-x来定位行的。

但在deleteRow方法中,删掉当前行后,作者只把当前行后面的行的datagrid-row-index更新了。也就是往前提1,弥补被删除行的空缺,但对datagrid-row-r1-x-x却没做任何改动。

这样就会造成下次执行 opts.finder.getTr的时候,获得的row错误,不是自己点击的row。造成上面所提的错误。

于是:

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
deleteRow: function (target, index) {
     var opts = $.data(target, "datagrid" ).options;
     var data = $.data(target, "datagrid" ).data;
     opts.finder.getTr(target, index).remove();
     var gd = $.data(target, "datagrid" );
     for ( var i = index + 1; i < data.rows.length; i++) {
         opts.finder.getTr(target, i, "body" , 2).attr( "datagrid-row-index" , i - 1)
         .attr( "id" ,gd.rowIdPrefix+ "-2-" +(i-1));
         var tr1 = opts.finder.getTr(target, i, "body" , 1).attr( "datagrid-row-index" , i - 1)
         .attr( "id" ,gd.rowIdPrefix+ "-1-" +(i-1));
         if (opts.rownumbers) {
             tr1.find( "div.datagrid-cell-rownumber" ).html(i);
         }
     }
     data.total -= 1;
     data.rows.splice(index, 1);
},

这是改进后的代码,第5行是我加的。

?
1
.attr( "id" ,gd.rowIdPrefix+ "-2-" +(i-1));

?
1
.attr( "id" ,gd.rowIdPrefix+ "-1-" +(i-1));

这个两行同时去设置他对应的datagrid-row-rx-x-x

这样两个标识就同步了。


哈哈,看上去多整齐,再看看没修改前:


好,到此这个bug就完美解决了。


原文http://my.oschina.net/fants/blog/77189

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值