Ext.js复选框删除已选行

237 阅读3分钟

需求描述

使用web进行数据库以及Java代码反向生成问题时,对于表字段可以进行增删改查

BUG

  • 在删除刚添加的字段(没有点击保存)的时,删除一个,其它刚添加的字段数据也会被删除掉。

BUG解决思路

  • 在点击删除的时候,能看到页面刷新了,进入代码也看到了在提交ajax后,会进行页面刷新。
  • 由此可以得出,删除应该分为两个情况:
    1. 当删除数据库已经存在的字段的时候,前端根据其已经获取的id,在数据库表中进行字段删除,然后前端页面刷新,重新读取数据库字段,字段就成功删除了。由于项目只考虑了这个状况,所以导致了如果没有id,刷新页面,没保存的字段就会被清除。
    2. 当前端刚添加的字段被删除的时候,前端只是删除表格的样式和样式中的数据,并不进行任何的前后端交互操操作。

具体修改实现

  1. 设置一个判断语句,判断当前的字段是否有字段id,从而区分上述两种情况
  2. 未保存的情况下,使用以下代码
    //获取多选框的选中项
    var record = boItemGridPanel.getSelectionModel().getSelected();
    //对选中的样式删除
    boItemGridPanel.store.remove(record);
    //boItemGridPanel.store.getModifiedRecords()获取样式的数据
    var records = boItemGridPanel.store.getModifiedRecords();
    //ext.js样式删除了,但是数据也需要删除处理,才能正确的进行删除
    //遍历新增字段的数组,对删除的字段样式的数据进行删除
    Ext.grid.removeFromArray(records, record.id);
/**
 * 遍历字段列表数据,根据删除的字段id进行数据清除
 * @param records[]    新增的字段列表数据
 * @param id   删除的字段id
 */
Ext.grid.removeFromArray = function(records,id){
   debugger;
   for(var i = 0;i < records.length;i++){
      if(records[i] && records[i].id){
         if(id == records[i].id){
            records.splice(i,1);
            break;
         }
      }
   }
}
  • 这里在解决删除后保存剩余数据时,由于对于ext.js没有深入理解,导致浪费了半天的时间进行debug
    • 在等到这个代码的时候我的思路已经有了,但是当时在实际写代码的时候,只是用了remove方法进行了样式删除,在前端实现要得到的结果,但是在保存提交的时候,删除的数据并未真正删除,删除的数据又保存成功了。
    • 后面再看ext.js的api得知,将样式删除的时候,数据还是存在store中的,要对修改story修改后的数据进行便利删除才能够,真正的对删除的样式进行清空。
        //这个方法可以获取到修改后的store的数据集合
        var records = boItemGridPanel.store.getModifiedRecords();
        //ext.js样式删除了,但是数据也需要删除处理,才能正确的进行删除
        //遍历新增字段的数组,对删除的字段样式的数据进行删除
        Ext.grid.removeFromArray(records, record.id);
    
  • 解决这个bug后才正真过的实现了bug修复