logologo
Get Started
Tutorials
Guide
Development
Plugins
API
Home
English
简体中文
日本語
한국어
Español
Português
Deutsch
Français
Русский
Get Started
Tutorials
Guide
Development
Plugins
API
Home
logologo
RunJS Overview
Importing Modules
Rendering in Container

Global Variables

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()

Creates and returns a new resource instance without writing to or modifying ctx.resource. It is suitable for scenarios requiring multiple independent resources or temporary usage.

#Use Cases

ScenarioDescription
Multiple resourcesLoad multiple data sources simultaneously (e.g., user list + order list), each using an independent resource.
Temporary queriesOne-time queries that are discarded after use, without needing to bind to ctx.resource.
Auxiliary dataUse ctx.resource for primary data and makeResource to create instances for additional data.

If you only need a single resource and want to bind it to ctx.resource, using ctx.initResource() is more appropriate.

#Type Definition

makeResource<T = FlowResource>(
  resourceType: 'APIResource' | 'SingleRecordResource' | 'MultiRecordResource' | 'SQLResource'
): T;
ParameterTypeDescription
resourceTypestringResource type: 'APIResource', 'SingleRecordResource', 'MultiRecordResource', 'SQLResource'

Returns: The newly created resource instance.

#Difference from ctx.initResource()

MethodBehavior
ctx.makeResource(type)Only creates and returns a new instance, not writing to ctx.resource. Can be called multiple times to obtain multiple independent resources.
ctx.initResource(type)Creates and binds if ctx.resource does not exist; returns it directly if it already exists. Ensures ctx.resource is available.

#Examples

#Single resource

const listRes = ctx.makeResource('MultiRecordResource');
listRes.setResourceName('users');
await listRes.refresh();
const users = listRes.getData();
// ctx.resource remains its original value (if any)

#Multiple resources

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>User count: {usersRes.getData().length}</p>
    <p>Order count: {ordersRes.getData().length}</p>
  </div>
);

#Temporary query

// One-time query, does not pollute ctx.resource
const tempRes = ctx.makeResource('SingleRecordResource');
tempRes.setResourceName('users');
tempRes.setFilterByTk(1);
await tempRes.refresh();
const record = tempRes.getData();

#Notes

  • The newly created resource needs to call setResourceName(name) to specify the collection, and then load data via refresh().
  • Each resource instance is independent and does not affect others; suitable for loading multiple data sources in parallel.

#Related

  • ctx.initResource(): Initialize and bind to ctx.resource
  • ctx.resource: The resource instance in the current context
  • MultiRecordResource — Multiple records/List
  • SingleRecordResource — Single record
  • APIResource — General API resource
  • SQLResource — SQL query resource