ctx.model

Instance FlowModel dalam konteks eksekusi RunJS saat ini, adalah entry default untuk skenario seperti JSBlock, JSField, JSAction. Tipe spesifik berubah sesuai konteks: dapat berupa subclass seperti BlockModel, ActionModel, JSEditableFieldModel, dll.

Skenario Penggunaan

SkenarioDeskripsi
JSBlockctx.model adalah model block saat ini, dapat mengakses resource, collection, setProps, dll.
JSField / JSItem / JSColumnctx.model adalah field model, dapat mengakses setProps, dispatchEvent, dll.
Action Event / ActionModelctx.model adalah action model, dapat membaca/menulis parameter step, mendispatch event, dll.

Tips: Jika perlu mengakses parent block yang menampung JS saat ini (seperti form/table block), gunakan ctx.blockModel; jika perlu mengakses model lain, gunakan ctx.getModel(uid).

Definisi Tipe

model: FlowModel;

FlowModel adalah base class, pada runtime sebenarnya adalah berbagai subclass (seperti BlockModel, FormBlockModel, TableBlockModel, JSEditableFieldModel, ActionModel, dll.), properti dan method yang tersedia berbeda berdasarkan tipe.

Properti Umum

PropertiTipeDeskripsi
uidstringIdentifier unik model, dapat digunakan untuk ctx.getModel(uid) atau binding UID popup
collectionCollectionData table yang terikat model saat ini (ada saat block/field terikat data)
resourceResourceInstance resource terkait, untuk refresh, mendapatkan baris terpilih, dll.
propsobjectKonfigurasi UI/perilaku model, dapat diupdate dengan setProps
subModelsRecord<string, FlowModel>Koleksi sub-model (seperti field di dalam form, kolom di dalam tabel)
parentFlowModelParent model (jika ada)

Method Umum

MethodDeskripsi
setProps(partialProps: any): voidUpdate konfigurasi model, memicu re-render (seperti ctx.model.setProps({ loading: true }))
dispatchEvent(eventName: string, payload?: any, options?: any): Promise<any[]>Dispatch event ke model, memicu flow yang dikonfigurasi di model tersebut yang memantau nama event itu. Opsional payload dikirim ke handler flow; options.debounce dapat mengaktifkan debounce
getStepParams?.(flowKey, stepKey)Membaca parameter step dari configuration flow (skenario panel pengaturan, action kustom, dll.)
setStepParams?.(flowKey, stepKey, params)Menulis parameter step configuration flow

Hubungan dengan ctx.blockModel, ctx.getModel

KebutuhanPenggunaan yang Direkomendasikan
Model dalam konteks eksekusi saat inictx.model
Parent block tempat JS saat ini beradactx.blockModel, sering digunakan untuk mengakses resource, form, collection
Mendapatkan model apa pun berdasarkan uidctx.getModel(uid) atau ctx.getModel(uid, true) (mencari lintas view stack)

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

Contoh

Update Status Block/Action

ctx.model.setProps({ loading: true });
await doSomething();
ctx.model.setProps({ loading: false });

Dispatch Event Model

// Dispatch event, memicu flow yang dikonfigurasi di model tersebut yang memantau nama event itu
await ctx.model.dispatchEvent('remove');
// Saat dengan payload, akan dikirim ke ctx.inputArgs handler flow
await ctx.model.dispatchEvent('customEvent', { id: 123 });

Menggunakan uid untuk Mengikat Popup atau Akses Lintas Model

const myUid = ctx.model.uid;
// Pada konfigurasi popup dapat meneruskan openerUid: myUid, untuk asosiasi
const other = ctx.getModel('other-block-uid');
if (other) other.rerender?.();

Terkait