ctx.blockModel

Model parent block tempat JS Field / JS Block saat ini berada (instance BlockModel). Pada skenario seperti JSField, JSItem, JSColumn, ctx.blockModel menunjuk ke form block atau table block yang menampung logika JS saat ini; pada JSBlock independen mungkin null atau sama dengan ctx.model.

Skenario Penggunaan

SkenarioDeskripsi
JSFieldMengakses form, collection, resource dari parent form block di dalam form field, untuk linkage atau validasi
JSItemPada item sub-table mengakses resource dan informasi data table dari parent table/form block
JSColumnPada kolom tabel mengakses resource (seperti getSelectedRows), collection dari parent table block
Action Form / Event FlowMengakses form untuk validasi sebelum submit, resource untuk refresh, dll.

Perhatian: ctx.blockModel hanya tersedia pada konteks RunJS yang memiliki parent block; pada JSBlock independen (tanpa parent form/table) mungkin null, disarankan melakukan pengecekan null sebelum digunakan.

Definisi Tipe

blockModel: BlockModel | FormBlockModel | TableBlockModel | CollectionBlockModel | DataBlockModel | null;

Tipe spesifik tergantung pada tipe parent block: form block umumnya FormBlockModel, EditFormModel, table block umumnya TableBlockModel.

Properti Umum

PropertiTipeDeskripsi
uidstringIdentifier unik model block
collectionCollectionData table yang terikat ke block saat ini
resourceResourceInstance resource yang digunakan block (SingleRecordResource / MultiRecordResource dll.)
formFormInstanceForm block: instance Ant Design Form, mendukung getFieldsValue, validateFields, setFieldsValue, dll.
emitterEventEmitterEvent emitter, dapat memantau formValuesChange, onFieldReset, dll.

Hubungan dengan ctx.model dan ctx.form

KebutuhanPenggunaan yang Direkomendasikan
Parent block tempat JS saat ini beradactx.blockModel
Membaca/menulis field formctx.form (setara dengan ctx.blockModel?.form, lebih praktis pada form block)
Model dalam konteks eksekusi saat inictx.model (di JSField adalah field model, di JSBlock adalah block model)

Pada JSField, ctx.model adalah field model, ctx.blockModel adalah form/table block yang menampung field tersebut; ctx.form biasanya adalah ctx.blockModel.form.

Contoh

Tabel: Mendapatkan Baris yang Dipilih dan Memprosesnya

const rows = ctx.blockModel?.resource?.getSelectedRows?.() || [];
if (rows.length === 0) {
  ctx.message.warning('Silakan pilih data terlebih dahulu');
  return;
}

Skenario Form: Validasi dan Refresh

if (ctx.blockModel?.form) {
  await ctx.blockModel.form.validateFields();
  await ctx.blockModel.resource?.refresh?.();
}

Memantau Perubahan Form

ctx.blockModel?.emitter?.on?.('formValuesChange', (payload) => {
  // Lakukan linkage atau re-render berdasarkan nilai form terbaru
});

Memicu Re-render Block

ctx.blockModel?.rerender?.();

Hal yang Perlu Diperhatikan

  • ctx.blockModel mungkin null pada JSBlock independen (tanpa parent form/table block), disarankan menggunakan optional chaining sebelum mengakses propertinya: ctx.blockModel?.resource?.refresh?.().
  • Pada JSField / JSItem / JSColumn, ctx.blockModel adalah form atau table block yang menampung field saat ini; pada JSBlock, mungkin diri sendiri atau block tingkat atas, tergantung hierarki sebenarnya.
  • resource hanya ada pada data block; form hanya ada pada form block, table block biasanya tidak memiliki form.

Terkait

  • ctx.model: Model dalam konteks eksekusi saat ini
  • ctx.form: Instance form, sering digunakan pada form block
  • ctx.resource: Instance resource (setara dengan ctx.blockModel?.resource, jika ada langsung gunakan)
  • ctx.getModel(): Mendapatkan model block lain berdasarkan uid