背景
我们的autoFitColumn和autoFitRow这两个方法的作用是对执行行列设置成自适应行高列宽的,但是这两个代码的会触发ColumnWidthChanged、RowHeightChanged事件,这是因为autoFitColumn是一个较老的API了,之前我们也发现了,但是如果现在更改这个API的逻辑会造成老用户的一些使用习惯以及代码兼容性上出现问题,因此目前我们无法判断是代码还是UI双击行列触发了ColumnWidthChanged、RowHeightChanged事件。可是会有用户存在业务需求,仅仅对UI操作的事件进行监听和逻辑的执行,对通过API触发的事件做其他处理,这该怎么办呢?
代码实现
实际上,我们的autoFitRow方法和autoFitColumn方法是借助指令来实现的,因此我们可以像重写其他指令一样重写这两个方法调用的指令,为指令传递一个布尔值flag,代码执行时,传入这个flag(UI操作肯定是不会携带这个我们自定义的参数的),从而判断自适应行高列宽的具体是代码操作还是UI操作 - var autoFitColumnCommand = {
- canUndo: true,
- execute: function (spread, options, isUndo) {
- var Commands = GC.Spread.Sheets.Commands;
- if (isUndo) {
- Commands.undoTransaction(spread, options);
- return true;
- } else {
- Commands.startTransaction(spread, options);
- if (options.flag) {
- console.log("代码操作")
- } else {
- console.log("UI操作")
- }
- GC.Spread.Sheets.Commands.autoFitColumn.execute(spread, options, isUndo)
- Commands.endTransaction(spread, options);
- return true;
- }
- }
- };
- var commandManager = spread.commandManager();
- commandManager.register('autoFitColumn', autoFitColumnCommand);
- commandManager.execute({ cmd: "autoFitColumn", sheetName: "Sheet1", columns: [{ column: 0 }], isRowHeader: false, autoFitType: GC.Spread.Sheets.AutoFitType.cell, flag: true });
复制代码 |