Doğrulayıcılar

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));
  }
};
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, '');
};

Değiştirici doğrulayıcı içeren metin giriş alanı

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;
};

Sıfırlama doğrulayıcısı içeren metin giriş alanı

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);
  }
};