ctx.model

当前 RunJS 执行上下文所在的 FlowModel 实例,是 JSBlock、JSField、JSAction 等场景的默认入口。具体类型随上下文变化:可能是 BlockModelActionModelJSEditableFieldModel 等子类。

适用场景

场景说明
JSBlockctx.model 即为当前区块模型,可访问 resourcecollectionsetProps
JSField / JSItem / JSColumnctx.model 为字段模型,可访问 setPropsdispatchEvent
操作事件 / ActionModelctx.model 为操作模型,可读写步骤参数、派发事件等

提示:若需访问承载当前 JS 的父区块(如表单/表格区块),使用 ctx.blockModel;若需访问其他模型,使用 ctx.getModel(uid)

类型定义

model: FlowModel;

FlowModel 为基类,实际运行时为各种子类(如 BlockModelFormBlockModelTableBlockModelJSEditableFieldModelActionModel 等),可用属性和方法因类型而异。

常用属性

属性类型说明
uidstring模型唯一标识,可用于 ctx.getModel(uid) 或弹窗 UID 绑定
collectionCollection当前模型绑定的数据表(区块/字段绑定数据时存在)
resourceResource关联的资源实例,用于刷新、获取选中行等
propsobject模型 UI/行为配置,可用 setProps 更新
subModelsRecord<string, FlowModel>子模型集合(如表单内字段、表格内列)
parentFlowModel父模型(若有)

常用方法

方法说明
setProps(partialProps: any): void更新模型配置,触发重新渲染(如 ctx.model.setProps({ loading: true })
dispatchEvent(eventName: string, payload?: any, options?: any): Promise<any[]>向模型派发事件,触发该模型上配置的、监听该事件名的流程。可选 payload 传给流程 handler;options.debounce 可开启防抖
getStepParams?.(flowKey, stepKey)读取配置流步骤参数(设置面板、自定义操作等场景)
setStepParams?.(flowKey, stepKey, params)写入配置流步骤参数

与 ctx.blockModel、ctx.getModel 的关系

需求推荐用法
当前执行上下文所在模型ctx.model
当前 JS 所在的父区块ctx.blockModel,常用于访问 resourceformcollection
按 uid 获取任意模型ctx.getModel(uid)ctx.getModel(uid, true)(跨视图栈查找)

在 JSField 中,ctx.model 为字段模型,ctx.blockModel 为承载该字段的表单/表格区块。

示例

更新区块/操作状态

ctx.model.setProps({ loading: true });
await doSomething();
ctx.model.setProps({ loading: false });

派发模型事件

// 派发事件,触发该模型上配置的、监听该事件名的流程
await ctx.model.dispatchEvent('remove');
// 带 payload 时,会传给流程 handler 的 ctx.inputArgs
await ctx.model.dispatchEvent('customEvent', { id: 123 });

使用 uid 绑定弹窗或跨模型访问

const myUid = ctx.model.uid;
// 弹窗配置中可传入 openerUid: myUid,用于关联
const other = ctx.getModel('other-block-uid');
if (other) other.rerender?.();

相关