logologo
スタート
マニュアル
開発
プラグイン
API
ホーム
English
简体中文
日本語
한국어
Español
Português
Deutsch
Français
Русский
Italiano
Türkçe
Українська
Tiếng Việt
Bahasa Indonesia
ไทย
Polski
Nederlands
Čeština
العربية
עברית
हिन्दी
Svenska
スタート
マニュアル
開発
プラグイン
API
ホーム
logologo
概要

ブロック

概要

データブロック

テーブル
フォーム
詳細
リスト
グリッドカード
チャート

フィルターブロック

フォーム

その他のブロック

操作パネル
Iframe
Markdown
JS Block

ブロック設定項目

データ範囲
データの読み込み方法
レイアウト
ブロック連動ルール
フィールド連動ルール
並び替えルール
ドラッグ&ドロップ並び替え
ブロックの削除
ブロックタイトル
ブロックの高さ
フォームの下書き

フィールド

概要

共通設定項目

テーブルフィールド
詳細フィールド
フィルターフォームフィールド
フォームフィールド

固有設定項目

日付
ファイルマネージャー
サブフォーム
セレクト
データセレクター
カスケード選択
サブテーブル(インライン編集)
サブテーブル(ポップアップ編集)
サブ詳細
タイトル
JS Field
JS Item
JS Column

フィールド設定項目

デフォルト値
フィールドラベル
ラベルを表示
フィールドのツールチップ
データ範囲
フィールドコンポーネント
数値フォーマット
パターン
必須
タイトルフィールド
バリデーションルール
関連フィールドコンポーネント

アクション

概要

アクション設定項目

編集ボタン
二次確認
フィールド値の割り当て
ワークフローをバインド
編集ポップアップ
アクション連動ルール

アクションタイプ

新規追加
表示
削除
編集
複製
インポート
インポートPro
エクスポート
エクスポートPro
添付ファイルのエクスポート
フィルター
リンク
ポップアップを開く
リフレッシュ
データ送信
ワークフローをトリガー
レコード更新
一括更新
一括編集
子レコードの追加
JS Action
アクション権限

高度な設定

連動ルール
イベントフロー
変数
RunJS
UIテンプレート
Previous PageJS Item
Next Pageデフォルト値
AI翻訳通知

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

#JS Column

#はじめに

JS Column は、テーブルの「カスタム列」に使用され、JavaScript を通じて各行のセル内容をレンダリングします。特定のフィールドにバインドされず、派生列、フィールドをまたいだ組み合わせ表示、ステータスバッジ、ボタン操作、リモートデータの集計などのシナリオに適しています。

jscolumn-add-20251029

#ランタイムコンテキスト API

JS Column の各セルがレンダリングされる際、以下のコンテキスト機能を利用できます:

  • ctx.element:現在のセルの DOM コンテナ(ElementProxy)。innerHTML、querySelector、addEventListener などをサポートします。
  • ctx.record:現在の行のレコードオブジェクト(読み取り専用)。
  • ctx.recordIndex:現在のページ内の行インデックス(0 から開始、ページネーションの影響を受ける可能性があります)。
  • ctx.collection:テーブルにバインドされたコレクションのメタ情報(読み取り専用)。
  • ctx.requireAsync(url):URL に従って AMD/UMD ライブラリを非同期でロードします。
  • ctx.importAsync(url):URL に従って ESM モジュールを動的にインポートします。
  • ctx.openView(options):設定済みのビュー(ポップアップ/ドロワー/ページ)を開きます。
  • ctx.i18n.t() / ctx.t():国際化。
  • ctx.onRefReady(ctx.ref, cb):コンテナの準備が整ってからレンダリングします。
  • ctx.libs.React / ctx.libs.ReactDOM / ctx.libs.antd / ctx.libs.antdIcons / ctx.libs.dayjs / ctx.libs.lodash / ctx.libs.math / ctx.libs.formula:組み込みの React / ReactDOM / Ant Design / Ant Design アイコン / dayjs / lodash / math.js / formula.js などの共通ライブラリ。JSX レンダリング、時間処理、データ操作、数学演算に使用されます。(ctx.React / ctx.ReactDOM / ctx.antd は互換性のために引き続き保持されます。)
  • ctx.render(vnode):React 要素/HTML/DOM をデフォルトコンテナ ctx.element(現在のセル)にレンダリングします。複数回レンダリングすると Root が再利用され、コンテナの既存の内容が上書きされます。

#エディタとスニペット

JS Column のスクリプトエディタは、構文ハイライト、エラーヒント、組み込みコードスニペット(Snippets)をサポートしています。

  • Snippets:組み込みコードスニペットのリストを開き、検索して現在のカーソル位置にワンクリックで挿入できます。
  • Run:現在のコードを直接実行します。実行ログは下部の Logs パネルに出力され、console.log/info/warn/error とエラーのハイライト表示に対応しています。

jscolumn-toolbars-20251029

AI 従業員と組み合わせてコードを生成できます:

  • AI 従業員 · Nathan:フロントエンドエンジニア

#よくある使い方

#1) 基礎的なレンダリング(現在の行レコードの読み取り)

ctx.render(<span className="nb-js-col-name">{ctx.record?.name ?? '-'}</span>);

#2) JSX を使用した React コンポーネントのレンダリング

const { Tag } = ctx.libs.antd;
const status = ctx.record?.status ?? 'unknown';
const color = status === 'active' ? 'green' : status === 'blocked' ? 'red' : 'default';
ctx.render(
  <div style={{ padding: 4 }}>
    <Tag color={color}>{String(status)}</Tag>
  </div>
);

#3) セル内でポップアップ/ドロワーを開く(表示/編集)

const tk = ctx.collection?.getFilterByTK?.(ctx.record);
ctx.render(
  <a onClick={async () => {
    await ctx.openView('target-view-uid', {
      navigation: false,
      mode: 'drawer',
      dataSourceKey: ctx.collection?.dataSourceKey,
      collectionName: ctx.collection?.name,
      filterByTk: tk,
    });
  }}>表示</a>
);

#4) サードパーティライブラリのロード(AMD/UMD または ESM)

// AMD/UMD
const _ = await ctx.requireAsync('https://cdn.jsdelivr.net/npm/lodash@4/lodash.min.js');
const items = _.take(Object.keys(ctx.record || {}), 3);
ctx.render(<code>{items.join(', ')}</code>);

// ESM
const { default: dayjs } = await ctx.importAsync('https://cdn.jsdelivr.net/npm/dayjs/+esm');
ctx.render(<span>{dayjs().format('YYYY-MM-DD')}</span>);

#注意事項

  • 外部ライブラリのロードには信頼できる CDN を使用し、失敗した場合のフォールバック(例:if (!lib) return;)を準備することをお勧めします。
  • セレクタは class または [name=...] を優先的に使用し、複数のブロック/ポップアップでの重複を避けるために固定の id の使用は避けてください。
  • イベントのクリーンアップ:テーブルの行はページネーション/リフレッシュによって動的に変化し、セルは複数回レンダリングされます。イベントをバインドする前に、重複トリガーを避けるためにクリーンアップまたは重複排除を行う必要があります。
  • パフォーマンスの提案:各セルで大きなライブラリを繰り返しロードすることは避けてください。ライブラリを上位レイヤー(グローバル変数やテーブルレベルの変数など)にキャッシュしてから再利用する必要があります。