菜单事件
查询打开前、打开后和关闭事件的执行时机与返回值。
events 写在菜单顶层,与 menu、panels 同级;别名为 event、listener。每个事件接受同样的动作结构:文本、布尔值、动作列表、条件或输入对象。
events:
pre_open:
if: 'perm invero.use'
then: true
else:
- "mmsg '&c你没有使用权限'"
- false
post_open: "mmsg '&7菜单已打开'"
close: "mmsg '&7菜单已关闭'"事件字段
| 字段 | 类型 | 必填 | 省略行为 | 说明 |
|---|---|---|---|---|
preOpen(pre_open、open) | 动作或动作列表 | 否 | 允许打开 | 已创建会话、尚未放置面板时执行;等待动作结果,结果为 false 时取消打开 |
postOpen(post_open、opened) | 动作或动作列表 | 否 | 不执行打开后动作 | 窗口打开、标题任务和菜单任务已提交后启动;返回 false 不会撤销打开 |
close | 动作或动作列表 | 否 | 不执行关闭动作 | 会话注销、窗口关闭或切换菜单时启动;返回 false 不能阻止关闭 |
上例的 perm 是通用 Kether 权限判断,语法见 TabooLib Kether 列表。有权限时打开;没有权限时先提示,再明确返回 false。
初始化与刷新位置
在 pre_open 初始化供标题、图标或筛选读取的变量:
events:
pre_open: |-
ctx set clicks to 0
true这会在每次打开时重设 clicks,包括 menu switch 或输入成功后的重开。如果需要保留传入值,应先判断是否存在,而不是无条件覆盖:
events:
pre_open:
if: 'ctx without clicks'
then: 'ctx set clicks to 0 true'
else: truepre_open 时面板还没建立,不在这里执行 icon refresh、翻页、滚动等窗口操作。需要操作已存在的图标时放到 post_open 或点击动作;生成器列表可能稍后才完成加载,不把 post_open 当作所有外部数据都已就绪的通知。
关闭事件
关闭事件发生时原会话已注销。可以发送关闭提示或用 persist 保存数据;不要在这里依赖 ctx 重新取得原窗口、刷新图标或取消关闭。事件脚本仍可读取传入的旧会话变量文本,例如 {{&selected}}。
输入捕获会先关闭菜单,因此也会触发 close。若在 close 无条件打开菜单,会与输入或导航抢占窗口;确需重开时,使用明确的业务条件。周期任务会随原会话注销而停止,详见任务。
Last updated on