logologo
开始
教程
手册
开发
插件
API
首页
English
简体中文
日本語
한국어
Español
Português
Deutsch
Français
Русский
开始
教程
手册
开发
插件
API
首页
logologo
RunJS 概述
导入模块
容器内渲染

全局变量

window
document
navigator

ctx

ctx.blockModel
ctx.collection
ctx.collectionField
ctx.dataSource
ctx.dataSourceManager
ctx.element
ctx.exit()
ctx.exitAll()
ctx.filterManager
ctx.form
ctx.getModel()
ctx.getValue()
ctx.getVar()
ctx.i18n
ctx.importAsync()
ctx.initResource()
ctx.libs
ctx.location
ctx.logger
ctx.makeResource()
ctx.message
ctx.modal
ctx.model
ctx.notification
ctx.off()
ctx.on()
ctx.openView()
ctx.render()
ctx.request()
ctx.requireAsync()
ctx.resource
ctx.route
ctx.router
ctx.setValue()
ctx.sql
ctx.t()
ctx.view
Previous Pagectx.requireAsync()
Next Pagectx.route

#ctx.resource

当前上下文中的 FlowResource 实例,用于访问和操作数据。多数区块(表单、表格、详情等)和弹窗场景下,运行环境会预先绑定 ctx.resource;JSBlock 等默认无 resource 的场景,需先调用 ctx.initResource() 初始化,再通过 ctx.resource 使用。

#适用场景

凡 RunJS 中需要访问结构化数据(列表、单条、自定义 API、SQL)的场景均可使用。表单、表格、详情区块及弹窗通常已预绑定;JSBlock、JSField、JSItem、JSColumn 等若需加载数据,可先 ctx.initResource(type) 再访问 ctx.resource。

#类型定义

resource: FlowResource | undefined;
  • 有预绑定的上下文下,ctx.resource 为对应 resource 实例;
  • JSBlock 等默认无 resource,为 undefined,需先 ctx.initResource(type) 后才有值。

#常见方法

不同 resource 类型(MultiRecordResource、SingleRecordResource、APIResource、SQLResource)暴露的方法略有差异,以下为通用或常用方法:

方法说明
getData()获取当前数据(列表或单条)
setData(value)设置本地数据
refresh()按当前参数发起请求,刷新数据
setResourceName(name)设置资源名(如 'users'、'users.tags')
setFilterByTk(tk)设置主键筛选(单条 get 等)
runAction(actionName, options)调用任意资源 action(如 create、update)
on(event, callback) / off(event, callback)订阅/取消订阅事件(如 refresh、saved)

MultiRecordResource 特有:getSelectedRows()、destroySelectedRows()、setPage()、next()、previous() 等。

#示例

#列表数据(需先 initResource)

ctx.initResource('MultiRecordResource');
ctx.resource.setResourceName('users');
await ctx.resource.refresh();
const rows = ctx.resource.getData();

#表格场景(已预绑定)

const rows = ctx.resource?.getSelectedRows?.() || [];
for (const row of rows) {
  console.log(row);
}

await ctx.resource.destroySelectedRows();
ctx.message.success(ctx.t('已删除'));

#单条记录

ctx.initResource('SingleRecordResource');
ctx.resource.setResourceName('users');
ctx.resource.setFilterByTk(1);
await ctx.resource.refresh();
const record = ctx.resource.getData();

#调用自定义 action

await ctx.resource.runAction('create', { data: { name: '张三' } });

#与 ctx.initResource / ctx.makeResource 的关系

  • ctx.initResource(type):若 ctx.resource 不存在则创建并绑定;已存在则直接返回。保证 ctx.resource 可用。
  • ctx.makeResource(type):新建 resource 实例并返回,不写入 ctx.resource。适合需要多个独立 resource 或临时使用的场景。
  • ctx.resource:访问当前上下文中已绑定的 resource。多数区块/弹窗已预绑定;无绑定时为 undefined,需先 ctx.initResource。

#注意事项

  • 使用前建议做空值判断:ctx.resource?.refresh(),尤其在 JSBlock 等可能无预绑定的场景。
  • 初始化后需调用 setResourceName(name) 指定数据表,再通过 refresh() 加载数据。
  • 各 Resource 类型的完整 API 见下方链接。

#相关

  • ctx.initResource() - 初始化并绑定 resource 到当前上下文
  • ctx.makeResource() - 新建 resource 实例,不绑定到 ctx.resource
  • MultiRecordResource - 多条记录/列表
  • SingleRecordResource - 单条记录
  • APIResource - 通用 API 资源
  • SQLResource - SQL 查询资源