Doğrulayıcılar

Doğrulayıcı, alanların yeni değerini alıp ona göre işlem yapan bir işlevdir. Bir alanı özelleştirmenin basit bir yoludur. Bunlar, bir alanın değeri değiştiğinde işlevi tetiklemenize, girişi değiştirmenize veya kabul edilebilir değerleri sınırlandırmanıza olanak tanır.

Sık karşılaşılan bazı örnekler:

  • Bir metin alanını yalnızca harf kabul edecek şekilde sınırlandırma.
  • Metin alanının boş olmamasını gerekli kılma.
  • Gelecekte bir tarihi zorunlu kılma.
  • Bir blokun şeklini açılır listeye göre değiştirme.

Doğrulayıcı türleri

Doğrulayıcılar, ne tür doğrulayıcı olduklarına bağlı olarak farklı zamanlarda yürütülür.

Sınıf doğrulayıcıları, 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 (oluşturucuya 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 sayfasındaki Sınıf doğrulayıcı uygulama bölümüne bakın.

Yerel doğrulayıcılar, alanın oluşturulduğu anda tanımlanır. Yerel doğrulayıcılar, oluşturucuya iletilen değer hariç alana iletilen tüm değerler üzerinde çalışır. Bu, reklamların aşağıdakiler üzerinde çalıştığı anlamına gelir:

  • XML'de bulunan değerler.
  • setValue öğesine değerler iletildi.
  • Değerler, setFieldValue öğesine iletilir.
  • Değerler kullanıcı tarafından değiştirildi.

Sınıf doğrulayıcılar, kapı görevlileri gibi davrandıkları için yerel doğrulayıcılardan önce çalıştırılır. Aktarmadan önce değerin doğru türde olduğundan emin olurlar.

Değer doğrulama sırası ve genel değerler hakkında daha fazla bilgi için Değerler bölümüne bakın.

Yerel doğrulayıcıyı kaydetme

Yerel doğrulayıcılar iki şekilde kaydedilebilir:

  • Alan oluşturucuya doğrudan 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);
  }
};

Yukarıdaki yöntemlerin her ikisi de JSON biçimini desteklemek için bir uzantı içinde sarmalanabilir.

Alanın değeri, doğrulanmakta olan alanın türüne bağlı olarak çok farklı olabilir (ör.sayı alanında bir sayı, metin giriş alanında ise bir dize saklanır). Bu nedenle doğrulayıcı oluşturmadan önce kendi alanınıza ait dokümanları okumanız önerilir.

Döndürülen değerler

Doğrulayıcının döndürülen değeri, alanın bir sonraki adımda ne yapacağını belirler. Üç olasılık vardır:

Değiştirilmiş Dönüş Değeri

Değiştirilmiş veya farklı bir değer; daha sonra alanın yeni değeri olur. Bu işlem, genellikle sondaki boşlukların kaldırılması gibi bir değeri temizlemek için kullanılır.

Değiştirilen Doğrulayıcı örneği:

// Remove all 'a' characters from the text input's value.
var validator = function(newValue) {
  return newValue.replace(/\a/g, '');
};

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

Null Dönüş Değeri

Boş. Bu, belirtilen değerin geçersiz olduğu anlamına gelir. Çoğu durumda bu alan, giriş değerini yoksayar. Tam davranış, alanın doValueInvalid_ fonksiyonu tarafından belirtilir.

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

Boş değerli doğrulayıcıya sahip metin giriş alanı

Tanımlanmamış Döndürülen Değer

Tanımlanmamış (veya döndürülen ifade yok) veya giriş değerinin, 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 dinleyicileri görevi görür.

İşleyici Doğrulayıcı örneği:

// Log the new value to console.
var validator = function(newValue) {
  console.log(newValue);
};

Görünen metin'in, alanın değerini nasıl yansıtmadığını bir kez daha unutmayın.

Bunun değeri

Doğrulayıcının içinde this, bloka değil alana işaret eder. Bir doğrulayıcının içindeki bloka erişmeniz gerekirse 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 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);
  }
};