Validator adalah fungsi yang mengambil nilai baru kolom, lalu bertindak berdasarkan nilai tersebut. Kolom ini adalah cara sederhana untuk menyesuaikan kolom. Dengan atribut ini, Anda dapat memicu fungsi saat nilai kolom berubah, mengubah input, atau membatasi nilai yang dapat diterima.
Beberapa contoh umum:
- Membatasi kolom teks agar hanya menerima huruf.
- Mewajibkan kolom teks tidak boleh kosong.
- Mewajibkan tanggal berada di masa mendatang.
- Mengubah bentuk blok berdasarkan dropdown.
Jenis validator
Validator dijalankan pada waktu yang berbeda-beda, bergantung pada jenis validatornya.
Validator class adalah bagian dari definisi class jenis kolom, dan biasanya digunakan untuk membatasi jenis nilai yang diizinkan oleh kolom (misalnya, kolom angka hanya menerima karakter numerik). Validasi class dijalankan pada semua nilai yang diteruskan ke kolom (termasuk nilai yang diteruskan ke konstruktor).
Untuk mengetahui informasi selengkapnya tentang validator class, lihat bagian Menerapkan validator class di Membuat Kolom Kustom.
Validator lokal ditentukan pada saat pembuatan kolom. Validator lokal berjalan pada semua nilai yang diteruskan ke kolom kecuali nilai yang diteruskan ke konstruktor. Ini berarti aplikasi berjalan di:
- Nilai yang terdapat dalam XML.
- Nilai yang diteruskan ke
setValue. - Nilai yang diteruskan ke
setFieldValue. - Nilai diubah oleh pengguna.
Validasi class dijalankan sebelum validasi lokal karena bertindak seperti penjaga gerbang. Mereka memastikan bahwa nilai tersebut memiliki jenis yang benar sebelum meneruskannya.
Untuk mengetahui informasi selengkapnya tentang urutan validasi nilai, dan nilai secara umum, lihat Nilai.
Mendaftarkan validator lokal
Validasi lokal dapat didaftarkan dengan dua cara:
- Ditambahkan langsung di konstruktor kolom.
Blockly.Blocks['validator_example'] = {
init: function() {
// Remove all 'a' characters from the text input's value.
var validator = function(newValue) {
return newValue.replace(/\a/g, '');
};
this.appendDummyInput()
.appendField(new Blockly.FieldTextInput('default', validator));
}
};
- Dengan
setValidator.
Blockly.Blocks['validator_example'] = {
init: function() {
// Remove all 'a' characters from the text input's value.
var validator = function(newValue) {
return newValue.replace(/\a/g, '');
};
var field = new Blockly.FieldTextInput('default');
field.setValidator(validator);
this.appendDummyInput().appendField(field);
}
};
Salah satu metode di atas dapat dibungkus dalam ekstensi, untuk mendukung format JSON.
Nilai kolom dapat sangat berbeda, bergantung pada jenis kolom yang divalidasi (misalnya, kolom angka akan menyimpan angka, sedangkan kolom input teks akan menyimpan string), jadi sebaiknya baca dokumentasi untuk kolom spesifik Anda sebelum membuat validator.
Nilai yang ditampilkan
Nilai yang ditampilkan oleh validator menentukan tindakan selanjutnya yang dilakukan kolom. Ada tiga kemungkinan:
Nilai Hasil yang Diubah
Nilai yang diubah atau berbeda, yang kemudian menjadi nilai baru kolom. Hal ini sering digunakan untuk membersihkan nilai, seperti dengan menghapus spasi di akhir.
Contoh Validator Pengubah:
// Remove all 'a' characters from the text input's value.
var validator = function(newValue) {
return newValue.replace(/\a/g, '');
};

Nilai Hasil Null
Null, yang berarti nilai yang diberikan tidak valid. Dalam sebagian besar kasus, kolom akan mengabaikan nilai input. Perilaku persisnya ditentukan oleh
doValueInvalid_
function kolom.
Contoh Validator Null:
// Any value containing a 'b' character is invalid. Other values are valid.
var validator = function(newValue) {
if (newValue.indexOf('b') != -1) {
return null;
}
return newValue;
};

Nilai Hasil yang Tidak Ditentukan
Undefined (atau tidak ada pernyataan return) atau nilai input, yang berarti bahwa nilai input harus menjadi nilai baru kolom. Jenis validator ini biasanya bertindak sebagai pemroses perubahan.
Contoh Validator Pemroses:
// Log the new value to console.
var validator = function(newValue) {
console.log(newValue);
};
Perhatikan sekali lagi bagaimana teks tampilan tidak selalu mencerminkan nilai kolom.
Nilai ini
Di dalam validator, this merujuk ke kolom, bukan blok. Jika Anda perlu
mengakses blok di dalam validator, gunakan fungsi getSourceBlock. Anda
juga dapat menggunakan
fungsi bind
untuk menetapkan konteks tempat validator dipanggil.
Contoh kode menggunakan getSourceBlock:
Blockly.Blocks['colour_match'] = {
init: function() {
this.appendDummyInput()
.appendField(new Blockly.FieldColour(
null, this.validate
), 'COLOUR');
this.setColour(this.getFieldValue('COLOUR'));
},
validate: function(colourHex) {
this.getSourceBlock().setColour(colourHex);
}
};
Contoh kode menggunakan
bind:
Blockly.Blocks['colour_match'] = {
init: function() {
this.appendDummyInput()
.appendField(new Blockly.FieldColour(
null, this.validate.bind(this)
), 'COLOUR');
this.validate(this.getFieldValue('COLOUR'));
},
validate: function(colourHex) {
this.setColour(colourHex);
}
};