Pelajari cara menggunakan panel aksi JS di YiDA untuk menulis logika bisnis dan evaluasi kondisi — mencakup binding aksi, parameter callback, debugging JS, serta peningkatan API subformulir bagi pengembang low-code.
Gunakan panel aksi di YiDA untuk menulis kode JS yang menjalankan logika bisnis atau memeriksa kondisi.Panel aksi mempermudah pengorganisasian dan penggunaan ulang kode, sekaligus membangun interaksi yang kompleks.
Logika yang ditulis di panel JS umumnya tidak berlaku untuk data historis.
Fungsi yang dideklarasikan dengan export akan dikenali panel aksi sehingga dapat dipilih dan dipanggil dari sana.Perhatikan kode berikut:
/** * Fungsi utilitas kustom; tidak menggunakan konteks (this) */function something() { alert('something')}/** * @title Tindakan kustom A * Dapat menggunakan konteks (this) */export function custom_action_a() { alert('custom action a')}/** * @title Tindakan kustom B */export function custom_action_b() { something(); // Panggil fungsi utilitas kustom this.custom_action_a(); // Panggil fungsi tindakan kustom}
Catatan:
Hanya deklarasi yang cocok dengan pola export function xxx() {} yang dikenali di panel aksi komponen. Nama metode yang diekspor harus unik.
Untuk memanggil aksi di panel secara manual, panggil this.methodName(); secara langsung.
Gunakan Chrome Devtools untuk melakukan debug. Jika Anda sering melakukan debug, akses YiDA melalui browser.Panel yang paling sering digunakan adalah Console, Network, dan Elements.Halaman tampilan YiDA dibangun dengan React, sehingga Anda juga dapat memasang React Developer Tools untuk melakukan debug pada UI YiDA.
Di dalam fungsi JS, gunakan kata kunci debugger untuk menjeda eksekusi guna keperluan debugging. Video berikut mendemonstrasikan penggunaan dasar debugger.
const subFormInst = this.$('subformUniqueId');console.log(subFormInst.getValue()); // Ambil seluruh daftar data subformulir// Ambil identifier baris terlebih dahuluconst items = subFormInst.getItems(); // ["tfitem_1", "tfitem_2"]items.forEach(item => { const rowData = subFormInst.getItemValue(item); // Ambil data baris console.log(rowData['subformInnerComponentUniqueId']); // Ambil data Bidang untuk baris yang ditentukan});
Saat data subformulir berubah, selain suntingan di tingkat Sel, perhitungan Formula, keterkaitan data, dan penetapan nilai eksternal juga memicu Peristiwa onChange pada subformulir. Untuk membantu Anda mengidentifikasi sumber perubahan, changes.fieldId diperkenalkan untuk menunjukkan Sel mana yang datanya berubah.
// Peristiwa yang di-bind ke subformulirexport function onChange({value, extra}) { const { formGroupId, from, changes = {} } = extra || {}; // Periksa apakah Bidang perangkat berubah if (changes.fieldId === 'subformDeviceFieldUniqueId') { // Tambahkan logika yang akan dijalankan setelah perubahan subformulir di sini };}
5.3 Perbarui data baris terkait saat data pada Tabel berubah
Gunakan API updateItemValue untuk menetapkan nilai ke Sel.Sebagai contoh, saat sebuah perangkat berubah, gunakan API tersebut untuk mengisi informasi lainnya pada subformulir saat ini.
// Peristiwa yang di-bind ke subformulirexport function onChange({value, extra}) { const { formGroupId, from, changes } = extra || {}; if (from === 'setItemValue') return; // Cegah infinite loop saat updateItemValue memicu onChange lagi // Tangani perubahan data satu baris const tableField = this.$('subformUniqueId'); // Periksa apakah Bidang perangkat berubah if (changes.fieldId === 'subformDeviceFieldUniqueId') { getDeviceInfo() // API Kustom untuk mengambil informasi perangkat .then((data) => { tableField.updateItemValue(formGroupId, { 'numberField_l00o018a': data.price, // Perbarui harga perangkat 'textareaField_kysd3grq': data.description, // Perbarui deskripsi perangkat }); }) };}
Anda tidak perlu lagi menetapkan nilai satu per satu melalui getComponent().setValue seperti sebelumnya. Cara tersebut tidak dapat menjamin pembaruan Formulir secara utuh dalam skenario asinkron.
export function didMount(){ console.log('Memasuki metode uji');- test1() // Pemanggilan dengan cara ini menghasilkan Kesalahan seperti di atas.+ this.test1() // Pemanggilan yang benar. Prinsipnya sederhana: konteks harus dilewatkan melalui this.}export function test1(){ console.log(this.$('abc').getValue());}
6.2 Permintaan ini telah diblokir; konten harus disajikan melalui HTTPS
Domain YiDA adalah https://www.yidaapps.com. Karena batasan Keamanan browser, hanya endpoint HTTPS yang dapat dipanggil; endpoint HTTP tidak diizinkan. Endpoint lokal seperti http://192.168.xxx juga akan diblokir.Penting:Untuk menyediakan layanan API, endpoint Anda harus memenuhi persyaratan berikut:
Menggunakan protokol HTTPS dengan sertifikat yang valid.