找回密码
 立即注册

QQ登录

只需一步,快速开始

wmhPTC

注册会员

6

主题

22

帖子

62

积分

注册会员

积分
62
wmhPTC
注册会员   /  发表于:2024-5-15 16:35  /   查看:734  /  回复:8
我想在切换到下一个sheet之前走一些业务逻辑,应该怎么写啊?是要用到oldSheet,和newSheet吗?

8 个回复

倒序浏览
Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:2024-5-15 16:44:26
沙发
您好,请问您具体是要实现怎么样的业务逻辑呢?ActiveSheetChanging事件中确实提供了您所描述的oldSheet和新的newSheet两个参数供您进行使用,能否满足您具体的需求需要根据您的场景进行判断
回复 使用道具 举报
wmhPTC
注册会员   /  发表于:2024-5-15 16:55:50
板凳
本帖最后由 wmhPTC 于 2024-5-15 17:17 编辑

我要在切换到下个sheet 之前,弹框提示是否保存当前sheet,点击保存后,继续切换,能做到吗?
回复 使用道具 举报
Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:2024-5-15 18:05:58
地板
wmhPTC 发表于 2024-5-15 16:55
我要在切换到下个sheet 之前,弹框提示是否保存当前sheet,点击保存后,继续切换,能做到吗?

可以的,如您上面所说,监听ActiveSheetChanging事件,并在事件中通过弹窗进行提示和逻辑的处理
回复 使用道具 举报
wmhPTC
注册会员   /  发表于:2024-5-15 18:42:22
5#
Richard.Huang 发表于 2024-5-15 18:05
可以的,如您上面所说,监听ActiveSheetChanging事件,并在事件中通过弹窗进行提示和逻辑的处理

怎么写呢?有类似的demo吗?
回复 使用道具 举报
Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:2024-5-16 11:29:21
6#
wmhPTC 发表于 2024-5-15 18:42
怎么写呢?有类似的demo吗?

附件是按照上面所描述的做的一个示例,您可以参考一下。需要注意的是,这里的弹窗不能用同步的模态弹窗,因为这会出现事件处理冲突,因为 confirm() 弹窗的同步阻塞特性会影响浏览器的事件循环,尤其是在与SpreadJS交互时。 事件发生时弹窗确认.html (4.67 KB, 下载次数: 49)
回复 使用道具 举报
wmhPTC
注册会员   /  发表于:2024-5-16 14:06:59
7#
Richard.Huang 发表于 2024-5-16 11:29
附件是按照上面所描述的做的一个示例,您可以参考一下。需要注意的是,这里的弹窗不能用同步的模态弹窗, ...

看你这个也是在切换到sheet2才弹的框,我需要在还没切换到sheet2之前弹框
回复 使用道具 举报
Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:2024-5-16 17:40:10
8#
wmhPTC 发表于 2024-5-16 14:06
看你这个也是在切换到sheet2才弹的框,我需要在还没切换到sheet2之前弹框

明白您的意思,但是我们目前没有在切换前触发activeSheet的事件,如果您期望实现这样一个效果,建议监听ActiveSheetChanging事件,对所有切换动作都cancel,然后根据弹窗中的确认和取消按钮去主动用代码切换sheet,具体操作如下:

  1. spread.bind(GC.Spread.Sheets.Events.ActiveSheetChanging, function (sender, args) {
  2.     args.oldSheet.isSelected(true);
  3.     args.newSheet.isSelected(false);
  4.     args.cancel = true;
  5.     document.getElementById('myModal').style.display = 'block';
  6.     document.getElementById('confirmBtn').addEventListener('click', function () {
  7.         document.getElementById('myModal').style.display = 'none';
  8.         spread.setActiveSheet(args.newSheet.name());
  9.         spread.repaint()
  10.     }, { once: true });

  11.     document.getElementById('cancelBtn').addEventListener('click', function () {
  12.         document.getElementById('myModal').style.display = 'none';
  13.     }, { once: true }); // { once: true } 确保事件处理程序只执行一次
  14. });
复制代码


回复 使用道具 举报
Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:2024-5-24 16:16:45
9#
您好,请问楼主的问题是否得到解决,如果仍然存在问题,欢迎继续跟帖询问
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部