Wilson.Zhang 发表于 2024-10-31 18:11:11

如何辨别 SpreadJS 中 RowHeightChanged 事件的触发源

本帖最后由 Wilson.Zhang 于 2024-10-31 20:30 编辑

SpreadJS通过RowHeightChanged事件监听单元格行高变化,可以在监听到该事件发生时实施相关业务逻辑。然而,通过光标拉伸行边框线以调整行高和自适应行高均可以触发RowHeightChanged事件。那么,如何区分事件发生时的触发动作是哪种呢?

面对这种判断问题,可以在代码中增设一个全局变量以标识,具体思路如下:

1. 设定autoFitRowFlag变量,以记录是否为代码侧通过Worksheet:autoFitRow()自适应行高,默认为false。
2. 在通过代码调用Worksheet:autoFitRow()前,将autoFitRowFlag置为true。
3. 在RowHeightChanged事件处理函数中,判断autoFitRowFlag变量的值:
3.1. 如果为true,意味着通过代码侧自适应行高,则可执行相关业务逻辑,并在处理完相关业务逻辑前或后设置其为false。
3.2. 如果为false,则通过UI菜单按钮或光标拉伸行边框线调整行高,则可执行相关业务逻辑。

将上述方案转为代码,如下代码所示:

var autoFitRowFlag = false;
sheet.unbind(GC.Spread.Sheets.Events.RowHeightChanged);
sheet.bind(GC.Spread.Sheets.Events.RowHeightChanged, function(e, args) {
    console.log('row height changed, args: ', args);
    if (autoFitRowFlag) {
      // Worksheet:autoFitRow()自适应行高
       console.log('auto fit row');
       autoFitRowFlag = false;
    } else {
      //UI菜单按钮或光标拉伸行边框线调整行高
      console.log('manual set row height');
    }
});
这个方法略显粗糙,虽然能够辨别动作源是Worksheet:autoFitRow()调整行高,但无法分辨触发源是UI菜单按钮和光标拉伸动作中的哪一个。

问题原帖:https://gcdn.grapecity.com.cn/forum.php?mod=viewthread&tid=227636
页: [1]
查看完整版本: 如何辨别 SpreadJS 中 RowHeightChanged 事件的触发源