在 RunJS 中订阅上下文事件(如字段值变化、属性变化、资源刷新等)。事件会根据类型映射到 ctx.element 上的自定义 DOM 事件或 ctx.resource 的内部事件总线。
| 场景 | 说明 |
|---|---|
| JSField / JSEditableField | 监听字段值从外部(表单、联动等)变更时同步更新 UI,实现双向绑定 |
| JSBlock / JSItem / JSColumn | 监听容器上的自定义事件,响应数据或状态变化 |
| resource 相关 | 监听资源刷新、保存等生命周期事件,在数据更新后执行逻辑 |
| 事件名 | 说明 | 事件来源 |
|---|---|---|
js-field:value-change | 字段值被外部修改(如表单联动、默认值更新) | ctx.element 上的 CustomEvent,ev.detail 为新值 |
resource:refresh | 资源数据已刷新 | ctx.resource 事件总线 |
resource:saved | 资源保存完成 | ctx.resource 事件总线 |
事件最终映射规则:以
resource:为前缀的走ctx.resource.on,其余通常走ctx.element上的 DOM 事件(若存在)。
ctx.on 注册的监听,应在适当时机通过 ctx.off 移除,避免内存泄漏或重复触发。useEffect 的 cleanup 函数中调用 ctx.off。ctx.off 可能不存在,使用时建议加可选链:ctx.off?.('eventName', handler)。ctx.on(eventName, handler) 都应有对应的 ctx.off(eventName, handler),且传入的 handler 引用必须一致。on/offjs-field:value-change)