ctx.initResource()

初始化当前上下文的 resource:若尚未存在 ctx.resource,则按指定类型创建一个并绑定到上下文;若已存在则直接使用。之后可通过 ctx.resource 访问。

适用场景

一般只在 JSBlock(独立区块)场景使用。多数区块、弹窗等会预先绑定 ctx.resource,无需手动调用;JSBlock 默认无 resource,需先 ctx.initResource(type) 再通过 ctx.resource 加载数据。

类型定义

initResource(
  type: 'APIResource' | 'SingleRecordResource' | 'MultiRecordResource' | 'SQLResource'
): FlowResource;
参数类型说明
typestring资源类型:'APIResource''SingleRecordResource''MultiRecordResource''SQLResource'

返回值:当前上下文中的 resource 实例(即 ctx.resource)。

与 ctx.makeResource() 的区别

方法行为
ctx.initResource(type)ctx.resource 不存在则创建并绑定;已存在则直接返回。保证 ctx.resource 可用
ctx.makeResource(type)仅创建新实例并返回,写入 ctx.resource。适合需要多个独立 resource 或临时使用的场景

示例

列表数据(MultiRecordResource)

ctx.initResource('MultiRecordResource');
ctx.resource.setResourceName('users');
await ctx.resource.refresh();
const rows = ctx.resource.getData();
ctx.render(<pre>{JSON.stringify(rows, null, 2)}</pre>);

单条记录(SingleRecordResource)

ctx.initResource('SingleRecordResource');
ctx.resource.setResourceName('users');
ctx.resource.setFilterByTk(1); // 指定主键
await ctx.resource.refresh();
const record = ctx.resource.getData();

指定数据源

ctx.initResource('MultiRecordResource');
ctx.resource.setDataSourceKey('main');
ctx.resource.setResourceName('orders');
await ctx.resource.refresh();

注意事项

  • 多数区块(表单、表格、详情等)和弹窗场景下,ctx.resource 已由运行环境预绑定,无需调用 ctx.initResource
  • 仅在 JSBlock 等默认无 resource 的上下文中需要手动初始化。
  • 初始化后需调用 setResourceName(name) 指定数据表,再通过 refresh() 加载数据。

相关