Doğrulayıcı, alanların yeni değerini alan ve ardından bu değer üzerinde işlem yapan bir işlevdir. Bu işlevler, alanları özelleştirmenin basit bir yoludur. Bir alanın değeri değiştiğinde işlevselliği tetiklemenize, girişi değiştirmenize veya hangi değerlerin kabul edilebilir olduğunu sınırlamanıza olanak tanır.
Sık karşılaşılan bazı örnekler:
- Bir metin alanının yalnızca harf kabul etmesini sağlama
- Bir metin alanının boş olmamasını zorunlu kılma.
- Tarihin gelecekte olmasını gerektirir.
- Bir bloğun şeklini açılır listeye göre değiştirme.
Doğrulayıcı türleri
Doğrulayıcılar, türlerine 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 parçasıdır ve genellikle alanın izin verdiği değerin 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 bölümündeki Sınıf doğrulayıcı uygulama başlıklı makaleyi inceleyin.
Yerel doğrulayıcılar, alan oluşturulurken tanımlanır. Yerel doğrulayıcılar, yapıcıya iletilen değer hariç alana iletilen tüm değerlerde çalışır. Bu, uygulamaların şu cihazlarda çalıştığı anlamına gelir:
- XML'de bulunan değerler.
setValue
öğesine aktarılan değerler.setFieldValue
öğesine aktarılan değerler.- Kullanıcı tarafından değiştirilen değerler.
Sınıf doğrulayıcıları, kapı bekçisi gibi davrandıkları için yerel doğrulayıcılardan önce çalıştırılır. Değeri iletmeden önce 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 bölümüne bakın.
Yerel doğrulayıcı kaydetme
Yerel doğrulayıcılar iki şekilde kaydedilebilir:
- Doğrudan bir alanın oluşturucusuna 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 birlikte.
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);
}
};
JSON biçimini desteklemek için yukarıdaki yöntemlerden biri uzantı içine alınabilir.
Alan değeri, doğrulanacak alanın türüne bağlı olarak çok farklı olabilir (ör.bir sayı alanı sayı, metin girişi alanı ise dize depolar). Bu nedenle, doğrulayıcı oluşturmadan önce belirli alanınızla ilgili dokümanları okumanız en iyisidir.
Döndürülen değerler
Doğrulayıcının döndürdüğü değer, alanın bir sonraki adımda ne yapacağını belirler. Üç olasılık vardır:
Değiştirilmiş Döndürme Değeri
Değiştirilmiş veya farklı bir değer, alanın yeni değeri olur. Bu işlev genellikle sondaki boşlukları kaldırarak değerleri temizlemek için kullanılır.
Değiştirme doğrulayıcısı ö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
Boş (null), yani belirtilen değer geçersiz. Çoğu durumda alan, giriş değerini yoksayar. Tam davranış, alanın doValueInvalid_
işlevi tarafından belirlenir.
Nulling Validator ö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ımsız (veya dönüş ifadesi yok) ya da giriş değeri. Bu, giriş değerinin alanın yeni değeri olması gerektiği anlamına gelir. Bu tür doğrulayıcılar genellikle değişiklik dinleyicisi olarak hareket eder.
Dinleyici doğrulayıcı örneği:
// Log the new value to console.
var validator = function(newValue) {
console.log(newValue);
};
Görünen metnin, alanın değerini yansıtmasının zorunlu olmadığını bir kez daha hatırlatırız.
Bunun değeri
Doğrulayıcıda this
, blok yerine alanı ifade eder. Doğrulayıcı içindeki bloğa erişmeniz gerekiyorsa getSourceBlock
işlevini kullanın. Ayrıca, doğrulayıcının çağrıldığı bağlamı ayarlamak için bind
işlevini de kullanabilirsiniz.
getSourceBlock
kullanılarak oluşturulan ö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
kullanılarak oluşturulan ö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);
}
};