Doğrulayıcı, alanın yeni değerini alan ve ardından bu değer üzerinde işlem yapan bir işlevdir. Bunlar, bir alanı özelleştirmenin basit bir yoludur. Bu işlevler, bir alanın değeri değiştiğinde işlevleri tetiklemenize, girişi değiştirmenize veya kabul edilen değerleri sınırlamanıza olanak tanır.
Sık karşılaşılan bazı örnekler:
- Bir metin alanını yalnızca harfleri kabul edecek şekilde kısıtlama.
- Bir metin alanının boş olmaması gerekir.
- Tarihin gelecekte olmasını gerektirir.
- Açılır listeye göre bir bloğun şeklini değiştirme.
Doğrulayıcı türleri
Doğrulayıcılar, ne tür bir doğrulayıcı olduklarına bağlı olarak farklı zamanlarda çalışır.
Sınıf doğrulayıcılar, bir alan türünün sınıf tanımının bir parçasıdır ve genellikle alanın izin verdiği değer türünü kısıtlamak için kullanılır (ör. sayı alanları yalnızca sayısal karakterleri kabul eder). Sınıf doğrulayıcıları, alana iletilen tüm değerlerde (yapıcıya iletilen değer dahil) çalıştırılır.
Sınıf doğrulayıcılar hakkında daha fazla bilgi için Özel Alan Oluşturma başlıklı makalenin Sınıf doğrulayıcı uygulama bölümüne bakın.
Yerel doğrulayıcılar, bir alanın oluşturulması sırasında tanımlanır. Yerel doğrulayıcılar, yapıcıya iletilen değer hariç alana iletilen tüm değerlerde çalışır. Bu, aşağıdaki platformlarda çalıştıkları anlamına gelir:
- XML'de bulunan değerler.
- setValue'e iletilen değerler.
- setFieldValue işlevine iletilen değerler.
- Kullanıcı tarafından değiştirilen değerler.
Sınıf doğrulayıcılar, giriş kapısı gibi davrandıkları için yerel doğrulayıcılardan önce çalıştırılır. Değeri iletmeden önce değerin doğru türde olduğundan emin olurlar.
Değer doğrulama sırası ve genel olarak değerler hakkında daha fazla bilgi için Değerler başlıklı makaleyi inceleyin.
Yerel doğrulayıcı kaydetme
Yerel doğrulayıcılar iki şekilde kaydedilebilir:
- Doğrudan bir alanın kurucusuna eklenir.
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));
}
};
- setValidator ile.
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);
}
};
Yukarıdaki yöntemlerden herhangi biri, JSON biçimini desteklemek için bir uzantı içine alınabilir.
Alanın değeri, doğrulanan alanın türüne bağlı olarak çok farklı olabilir (ör.sayı alanı bir sayı, metin giriş alanı ise bir dize depolar). Bu nedenle, doğrulayıcı oluşturmadan önce belirli alanınızın belgelerini okumanız önerilir.
Döndürülen değerler
Doğrulayıcının döndürdüğü değer, alanın sonraki işlemini belirler. Üç olasılık vardır:
Değiştirilmiş Döndürülen Değer
Değiştirilmiş veya farklı bir değer. Bu değer, alanın yeni değeri olur. Bu işlev genellikle bir değeri temizlemek için kullanılır (ör. sonundaki boşlukları kaldırarak).
Değiştiren doğrulayıcı örneği:
// Remove all 'a' characters from the text input's value.
var validator = function(newValue) {
return newValue.replace(/\a/g, '');
};
Boş Döndürülen Değer
Null (belirtilen değerin geçersiz olduğu anlamına gelir). Çoğu durumda alan, giriş değerini yoksayar. Tam davranış, alanın doValueInvalid_
işlevi tarafından belirtilir.
Boşluk Dolduran Doğrulayıcı örneği:
// 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;
};
Tanımsız Döndürülen Değer
Tanımlanmamış (veya döndürme ifadesi yok) veya giriş değeri. Bu durumda, giriş değeri alanın yeni değeri olur. Bu tür doğrulayıcılar genellikle değişiklik dinleyicisi olarak çalışır.
Dinleyici doğrulayıcı örneği:
// Log the new value to console.
var validator = function(newValue) {
console.log(newValue);
};
Görüntülenen metnin alanın değerini yansıtmadığını bir kez daha hatırlatmak isteriz.
Bu değerin değeri
Doğrulayıcı içinde this
, bloğu değil alanı ifade eder. Bir doğrulayıcının içindeki bloğa erişmeniz gerekiyorsa getSourceBlock
işlevini kullanın. Doğrulayıcının çağrıldığı bağlamı ayarlamak için bind işlevini de kullanabilirsiniz.
getSourceBlock
kullanan örnek kod:
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);
}
};
bind işlevini kullanan örnek kod:
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);
}
};