找回密码
 立即注册

QQ登录

只需一步,快速开始

nutstore
金牌服务用户   /  发表于:2021-11-12 11:35  /   查看:3336  /  回复:7
尝试了 SheetChanged,没效果。
你们对于 isProtected 的设置是会实时更新锁定效果的,所以应该是能感知到变化的,是不是有内部事件没开放出来,还是我用错事件了?

7 个回复

倒序浏览
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2021-11-12 14:22:26
沙发
你好,我这边跟我们研发同事确认了一下,目前是没有对应的事件可以监听表单保护的变化的。
回复 使用道具 举报
nutstore
金牌服务用户   /  发表于:2021-11-12 14:49:31
板凳
Derrick.Jiao 发表于 2021-11-12 14:22
你好,我这边跟我们研发同事确认了一下,目前是没有对应的事件可以监听表单保护的变化的。

这个事件可以加一下吗,你们内部应该是能实现的,应该也已经实现了。如果加的话可以一步到位不,直接 SheetOptionChanged 之类的
回复 使用道具 举报
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2021-11-12 15:09:49
地板
nutstore 发表于 2021-11-12 14:49
这个事件可以加一下吗,你们内部应该是能实现的,应该也已经实现了。如果加的话可以一步到位不,直接 She ...

请详细描述一下具体的应用场景,这边会将此作为需求提交调研。
回复 使用道具 举报
nutstore
金牌服务用户   /  发表于:2021-11-12 16:24:37
5#
Derrick.Jiao 发表于 2021-11-12 15:09
请详细描述一下具体的应用场景,这边会将此作为需求提交调研。

大概是这么个场景:

  1. function useCellEditable(cell: CellRange): boolean {
  2.   const [isProtected, setIsProtected] = useState<boolean>(
  3.     () => cell.sheet.options.isProtected,
  4.   )
  5.   const [locked, setLocked] = useState<boolean>(() => cell.locked())

  6.   useEffect(() => {
  7.     const workbook = cell.sheet.getParent()
  8.     if (!workbook) return

  9.     const onCellChanged = (
  10.       e: any,
  11.       args: Spread.Sheets.ICellChangedEventArgs,
  12.     ): void => {
  13.       if (args.propertyName !== '[styleinfo]') return

  14.       const currentLocked = cell.locked()
  15.       if (locked !== currentLocked) {
  16.         setLocked(currentLocked)
  17.       }
  18.     }

  19.     const onProtectChanged: EventListeners[EventNames.ProtectChanged] = ({
  20.       sheetName,
  21.       isProtected,
  22.     }) => {
  23.       if (cell.sheet.name() === sheetName) setIsProtected(isProtected)
  24.     }

  25.     cell.sheet.bind('CellChanged', onCellChanged)
  26.     cell.sheet.bind('ProtectChanged', onProtectChanged)
  27.     return () => {
  28.       cell.sheet.unbind('CellChanged', onCellChanged)
  29.       cell.sheet.unbind('ProtectChanged', onProtectChanged)
  30.     }
  31.   }, [cell, locked])

  32.   return !(isProtected && locked)
  33. }
复制代码

回复 使用道具 举报
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2021-11-12 17:19:10
6#
nutstore 发表于 2021-11-12 16:24
大概是这么个场景:

为了更加准确理解你的完整需求,请再加以文字描述为什么需要加上监听表单保护的事件。
回复 使用道具 举报
nutstore
金牌服务用户   /  发表于:2021-11-12 17:24:07
7#
Derrick.Jiao 发表于 2021-11-12 17:19
为了更加准确理解你的完整需求,请再加以文字描述为什么需要加上监听表单保护的事件。

因为 useCellEditable 中 editable 的计算要依赖 isProtected,而这个数据的变化目前无法直接侦听到
回复 使用道具 举报
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2021-11-12 17:45:45
8#
nutstore 发表于 2021-11-12 17:24
因为 useCellEditable 中 editable 的计算要依赖 isProtected,而这个数据的变化目前无法直接侦听到

收到,这边已将此问题作为需求记录下来,待研发进一步调研是否在后续版本添加。
如果确认添加,会在本贴及时通知您。
(已将此问题移至 产品需求版块)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部