KevinChen 发表于 2020-8-25 17:33:09

SpreadJS V13.2.0新特性 —— 为指定区域执行clearPendingChanges

SpreadJS的脏数据是一个使用率非常高的功能,它常常被用作监控表格内哪些数据被用户修改,这样可以避免我们每次执行提交时都操作全量的数据。
想象这样两个场景:
1、当表单中有多个数据区域(例如表格)时,我们只想保留其中一个table的脏数据状态时;
2、当用户把一个修改后的值,通过撤销或二次修改,又回到初始值时。

截至V13.2.0版本发布前,上述两个场景下,第一个场景我们只能先拿到所有的脏数据,然后根据脏数据所在区域挨个筛选出自己所需要的部分;第二个场景,只能通过维护一个初始数据源,拿到脏数据后需要整体遍历比对一遍,来决定是否保留脏数据。

现在,被这些问题困扰的小伙伴们有福了!SpreadJS V13.2.0 新增了“按区域清空脏数据”的功能,可以让我们很方便地随时维护脏数据结果集,类似以上两类场景的问题都可以轻松解决了!


拿场景2举例:
在新特性的功能支持下,我们只需要做两步工作,就可以实现这个功能了:
1、维护一个初始数据集,示例代码如下:
var sales = [
                { orderDate: '1/6/2013', item: 'Pencil', units: 95, cost: 1.99 },
                { orderDate: '4/1/2013', item: 'Binder', units: 60, cost: 4.99 },
                { orderDate: '6/8/2013', item: 'Pen Set', units: 16, cost: 15.99 },
                { orderDate: '7/6/2013', item: 'Pencil111', units: 95, cost: 1.99 },
                { orderDate: '8/1/2013', item: 'Binder111', units: 60, cost: 4.99 },
                { orderDate: '9/8/2013', item: 'Pen Set111', units: 16, cost: 15.99 }
      ];
      var initialSales = JSON.parse(JSON.stringify(sales));2、挂载一个事件,当用户修改数据时,自动对脏数据实时维护:
sheet.bind(GC.Spread.Sheets.Events.CellChanged, function (e, info) {
            if(info.propertyName === "value" && info.sheetArea === GC.Spread.Sheets.SheetArea.viewport){
                let sheet = info.sheet, row = info.row, col = info.col, newValue = info.newValue;
                if (newValue === initialSales]) { // the value is initial value
                  sheet.clearPendingChanges({
                        clearType: GC.Spread.Sheets.ClearPendingChangeType.dirty, row: row, rowCount: 1, col: col, colCount: 1
                  });
                  $("#dirtyRowsInfo").val(result);
                  $("#dirtyCellsInfo").val(result);
                }
            }
      });

这样当用户修改完毕后,程序会自动提供给我们一份“干净的”脏数据集,脏数据集里所有的元素都是真正被修改了的数据,不需要我们再做筛选。

那么完整的Demo在哪里?附件里有惊喜!


hnjkzhl 发表于 2022-2-22 17:13:36

demo中的按区域清空脏数据无法实现

Derrick.Jiao 发表于 2022-2-22 17:33:10

hnjkzhl 发表于 2022-2-22 17:13
demo中的按区域清空脏数据无法实现

已在以下帖子中回复,请移步
https://gcdn.grapecity.com.cn/forum.php?mod=viewthread&tid=141757
页: [1]
查看完整版本: SpreadJS V13.2.0新特性 —— 为指定区域执行clearPendingChanges