AI翻訳通知

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

ctx.getModel()

モデルの uid に基づいて、現在のエンジンまたはビュー履歴(View Stack)内のモデルインスタンス(BlockModel、PageModel、ActionModel など)を取得します。これは RunJS において、ブロック、ページ、またはポップアップを跨いで他のモデルにアクセスするために使用されます。

現在の実行コンテキストが存在するモデルやブロックのみが必要な場合は、ctx.getModel を使用するのではなく、ctx.model または ctx.blockModel を優先的に使用してください。

適用シーン

シーン説明
JSBlock / JSAction既知の uid に基づいて他のブロックのモデルを取得し、その resourceformsetProps などを読み書きします。
ポップアップ内の RunJSポップアップ内からそれを開いたページ上のモデルにアクセスする必要がある場合、searchInPreviousEngines: true を渡します。
カスタム操作ビュー履歴を跨いで uid により設定パネル内のフォームや子モデルを特定し、その設定や状態を読み取ります。

型定義

getModel<T extends FlowModel = FlowModel>(
  uid: string,
  searchInPreviousEngines?: boolean
): T | undefined

パラメータ

パラメータ説明
uidstringターゲットモデルインスタンスの一意識別子。設定時または作成時に指定されます(例:ctx.model.uid)。
searchInPreviousEnginesbooleanオプション、デフォルトは falsetrue の場合、「ビュー履歴」において現在のエンジンからルートに向かって検索し、上位エンジン(ポップアップを開いた元のページなど)のモデルを取得できます。

戻り値

  • 見つかった場合は、対応する FlowModel のサブクラスインスタンス(BlockModelFormBlockModelActionModel など)を返します。
  • 見つからない場合は undefined を返します。

検索範囲

  • デフォルト(searchInPreviousEngines: false: 現在のエンジン内のみで uid を検索します。ポップアップや多階層のビューでは、各ビューが独立したエンジンを持つため、デフォルトでは現在のビュー内のモデルのみを検索します。
  • searchInPreviousEngines: true: 現在のエンジンから開始し、previousEngine チェーンを遡って検索し、最初に見つかったものを返します。ポップアップ内からそれを開いたページのモデルにアクセスする場合に適しています。

示例

他のブロックを取得してリフレッシュ

const block = ctx.getModel('list-block-uid');
if (block?.resource) {
  await block.resource.refresh();
}

ポップアップ内からページ上のモデルにアクセス

// ポップアップ内から、それを開いたページ上のブロックにアクセスする
const pageBlock = ctx.getModel('page-block-uid', true);
if (pageBlock) {
  pageBlock.rerender?.();
}

モデルを跨いだ読み書きと再レンダリング(rerender)のトリガー

const target = ctx.getModel('other-block-uid');
if (target) {
  target.setProps({ loading: true });
  target.rerender?.();
}

安全な判定(存在チェック)

const model = ctx.getModel(someUid);
if (!model) {
  ctx.message.warning('ターゲットモデルが存在しません');
  return;
}

関連情報

  • ctx.model:現在の実行コンテキストが存在するモデル
  • ctx.blockModel:現在の JS が配置されている親ブロックのモデル。通常、getModel を使わずにアクセス可能です。