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在哪里?附件里有惊喜!
demo中的按区域清空脏数据无法实现 hnjkzhl 发表于 2022-2-22 17:13
demo中的按区域清空脏数据无法实现
已在以下帖子中回复,请移步
https://gcdn.grapecity.com.cn/forum.php?mod=viewthread&tid=141757
页:
[1]