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
AI翻訳通知

このドキュメントはAIによって翻訳されました。正確な情報については英語版をご参照ください。

#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) を実行した後に値が設定されます。

#よく使われるメソッド

リソースのタイプ(MultiRecordResource、SingleRecordResource、APIResource、SQLResource)によって公開されているメソッドは若干異なりますが、以下は共通または頻繁に使用されるメソッドです:

メソッド説明
getData()現在のデータを取得(リストまたは単一レコード)
setData(value)ローカルデータを設定
refresh()現在のパラメータでリクエストを発行し、データをリフレッシュ
setResourceName(name)リソース名を設定(例: 'users', 'users.tags')
setFilterByTk(tk)主キーによるフィルタリングを設定(単一レコードの取得など)
runAction(actionName, options)任意のリソースアクション(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();

#カスタムアクションの呼び出し

await ctx.resource.runAction('create', { data: { name: '田中太郎' } });

#ctx.initResource / ctx.makeResource との関係

  • ctx.initResource(type): ctx.resource が存在しない場合は作成してバインドし、既に存在する場合はそれを直接返します。これにより ctx.resource が利用可能であることを保証します。
  • ctx.makeResource(type): 新しい resource インスタンスを作成して返しますが、ctx.resource には書き込みません。複数の独立したリソースが必要な場合や、一時的な使用に適しています。
  • ctx.resource: 現在のコンテキストにバインドされている resource にアクセスします。ほとんどのブロックやポップアップでは既にあらかじめバインドされています。バインドされていない場合は undefined となるため、先に ctx.initResource を行う必要があります。

#注意事項

  • 使用前に ctx.resource?.refresh() のように空値チェックを行うことを推奨します。特に JSBlock など、あらかじめバインドされていない可能性があるシーンでは重要です。
  • 初期化後は setResourceName(name) を呼び出してデータテーブルを指定し、その後に refresh() でデータをロードする必要があります。
  • 各 Resource 型の完全な API については、以下のリンクを参照してください。

#関連情報

  • ctx.initResource() - リソースを初期化して現在のコンテキストにバインドする
  • ctx.makeResource() - 新しいリソースインスタンスを作成する(ctx.resource にはバインドしない)
  • MultiRecordResource - 複数レコード/リスト
  • SingleRecordResource - 単一レコード
  • APIResource - 汎用 API リソース
  • SQLResource - SQL クエリリソース