请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需一步,快速开始

KevinChen 讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2020-8-25 17:33  /   查看:2303  /  回复:2
SpreadJS的脏数据是一个使用率非常高的功能,它常常被用作监控表格内哪些数据被用户修改,这样可以避免我们每次执行提交时都操作全量的数据。
想象这样两个场景:
1、当表单中有多个数据区域(例如表格)时,我们只想保留其中一个table的脏数据状态时;
2、当用户把一个修改后的值,通过撤销或二次修改,又回到初始值时。

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

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


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


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

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


为指定区域执行clearPendingChanges示例.zip

984.26 KB, 下载次数: 26

2 个回复

倒序浏览
hnjkzhl
注册会员   /  发表于:2022-2-22 17:13:36
沙发
demo中的按区域清空脏数据无法实现
回复 使用道具 举报
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2022-2-22 17:33:10
板凳
hnjkzhl 发表于 2022-2-22 17:13
demo中的按区域清空脏数据无法实现

已在以下帖子中回复,请移步
https://gcdn.grapecity.com.cn/fo ... read&tid=141757
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部