如何区分autoFit来自于代码还是UI
背景我们的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 });
页:
[1]