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.logger
Next Pagectx.message

#ctx.makeResource()

新建一个 resource 实例并返回,不会写入或改变 ctx.resource。适合需要多个独立 resource 或临时使用的场景。

#适用场景

场景说明
多个 resource同时加载多个数据源(如用户列表 + 订单列表),每个用独立 resource
临时查询一次性查询,用完即弃,无需绑定到 ctx.resource
辅助数据主数据用 ctx.resource,额外数据用 makeResource 新建

若只需单一 resource 且希望绑定到 ctx.resource,使用 ctx.initResource() 更合适。

#类型定义

makeResource<T = FlowResource>(
  resourceType: 'APIResource' | 'SingleRecordResource' | 'MultiRecordResource' | 'SQLResource'
): T;
参数类型说明
resourceTypestring资源类型:'APIResource'、'SingleRecordResource'、'MultiRecordResource'、'SQLResource'

返回值:新创建的 resource 实例。

#与 ctx.initResource() 的区别

方法行为
ctx.makeResource(type)仅创建新实例并返回,不写入 ctx.resource。可多次调用得到多个独立 resource
ctx.initResource(type)若 ctx.resource 不存在则创建并绑定;已存在则直接返回。保证 ctx.resource 可用

#示例

#单个 resource

const listRes = ctx.makeResource('MultiRecordResource');
listRes.setResourceName('users');
await listRes.refresh();
const users = listRes.getData();
// ctx.resource 仍为原来的值(若有)

#多个 resource

const usersRes = ctx.makeResource('MultiRecordResource');
usersRes.setResourceName('users');
await usersRes.refresh();

const ordersRes = ctx.makeResource('MultiRecordResource');
ordersRes.setResourceName('orders');
await ordersRes.refresh();

ctx.render(
  <div>
    <p>用户数:{usersRes.getData().length}</p>
    <p>订单数:{ordersRes.getData().length}</p>
  </div>
);

#临时查询

// 一次性查询,不污染 ctx.resource
const tempRes = ctx.makeResource('SingleRecordResource');
tempRes.setResourceName('users');
tempRes.setFilterByTk(1);
await tempRes.refresh();
const record = tempRes.getData();

#注意事项

  • 新建的 resource 需调用 setResourceName(name) 指定数据表,再通过 refresh() 加载数据。
  • 每个 resource 实例独立,互不影响;适合并行加载多个数据源。

#相关

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