找回密码
 立即注册

QQ登录

只需一步,快速开始

Fufu

注册会员

4

主题

9

帖子

41

积分

注册会员

积分
41
  • 133

    金币

  • 4

    主题

  • 9

    帖子

最新发帖
Fufu
注册会员   /  发表于:2024-2-29 15:45  /   查看:1832  /  回复:5
5金币
本帖最后由 Richard.Huang 于 2024-3-8 10:30 编辑

产品:SpreadJS

autoFitColumn和手动拖拽调整列宽都会触发ColumnWidthChanged事件,如何区分这两种情况呢,怎么能做到在autoFitColumn时不触发ColumnWidthChanged事件

最佳答案

查看完整内容

这是因为autoFitColumn是一个较老的API了,之前我们也发现了,但是如果现在更改这个API会造成老用户的一些使用习惯以及代码兼容性,因此目前没有办法可以去判断自适应列高是否是代码操作,只能通过重写autoFitColumn指令来判断,您在代码进行自适应操作时给参数传一个布尔值flag,然后在excute方法中去获取这个flag来判断是否是代码操作 附件是按照这个思路实现的一个demo,您可以参考一下

5 个回复

倒序浏览
最佳答案
最佳答案
Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:2024-2-29 15:45:26
来自 4#
Fufu 发表于 2024-2-29 16:48
不好意思写错了,在autoFitColumn时不触发ColumnWidthChanged事件

这是因为autoFitColumn是一个较老的API了,之前我们也发现了,但是如果现在更改这个API会造成老用户的一些使用习惯以及代码兼容性,因此目前没有办法可以去判断自适应列高是否是代码操作,只能通过重写autoFitColumn指令来判断,您在代码进行自适应操作时给参数传一个布尔值flag,然后在excute方法中去获取这个flag来判断是否是代码操作
  1. var autoFitColumnCommand = {
  2.     canUndo: true,
  3.     execute: function (spread, options, isUndo) {
  4.         var Commands = GC.Spread.Sheets.Commands;
  5.         if (isUndo) {
  6.             Commands.undoTransaction(spread, options);
  7.             return true;
  8.         } else {
  9.             Commands.startTransaction(spread, options);
  10.             if (options.flag) {
  11.                 console.log("代码操作")
  12.             } else {
  13.                 console.log("UI操作")
  14.             }
  15.             GC.Spread.Sheets.Commands.autoFitColumn.execute(spread, options, isUndo)
  16.             Commands.endTransaction(spread, options);
  17.             return true;
  18.         }
  19.     }
  20. };
  21. var commandManager = spread.commandManager();
  22. commandManager.register('autoFitColumn', autoFitColumnCommand);
  23. commandManager.execute({ cmd: "autoFitColumn", sheetName: "Sheet1", columns: [{ column: 0 }], isRowHeader: false, autoFitType: GC.Spread.Sheets.AutoFitType.cell, flag: true });
复制代码


附件是按照这个思路实现的一个demo,您可以参考一下

判断是代码操作还是UI操作.html

4.9 KB, 下载次数: 139

回复 使用道具 举报
Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:2024-2-29 16:32:09
2#
您好,我按照您的描述监听了ColumnWidthChanged事件,但是通过代码设置列宽并不会触发这个事件,请问我应该如何复现您的问题呢
2.gif905223693.png
回复 使用道具 举报
Fufu
注册会员   /  发表于:2024-2-29 16:48:28
3#
Richard.Huang 发表于 2024-2-29 16:32
您好,我按照您的描述监听了ColumnWidthChanged事件,但是通过代码设置列宽并不会触发这个事件,请问我应该 ...

不好意思写错了,在autoFitColumn时不触发ColumnWidthChanged事件
回复 使用道具 举报
Fufu
注册会员   /  发表于:2024-3-6 11:48:04
5#
Richard.Huang 发表于 2024-2-29 18:09
这是因为autoFitColumn是一个较老的API了,之前我们也发现了,但是如果现在更改这个API会造成老用户的一 ...

是不是通过flag标识在ColumnWidthChanging 的时候cancel,来避免触发ColumnWidthChanged事件,尝试了这个方式是可以实现在autoFitColumn时不触发ColumnWidthChanged事件的
回复 使用道具 举报
Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:2024-3-6 12:26:53
6#
本帖最后由 Richard.Huang 于 2024-3-6 12:29 编辑
Fufu 发表于 2024-3-6 11:48
是不是通过flag标识在ColumnWidthChanging 的时候cancel,来避免触发ColumnWidthChanged事件,尝试了这个 ...

并不是,这个flag是在autoFitColumnCommand指令逻辑执行时判断用的,正常双击自适应是不会携带这个flag的,而您可以在代码中携带这个flag,从而判断触发事件的是哪一个,本帖子的问题解决,这里就先结帖了。后续如果您有新的问题,也欢迎创建新的求助帖。请记得设置最佳答案。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部