Özel alanı yeni sürüme geçirme

Temmuz 2019'da (sürüm 2.20190722) daha kodlanmış alanlar API'si eklendi. Bu amacı geriye dönük uyumluluğa sahip olacaktır. Bu, daha önce bir özel alanı büyük olasılıkla çalışmaya devam edecektir. Özel alanınızın yeni sürüme geçirilmesi gerekip gerekmediğine karar vermeden önce Tehlike alanlar bölümüne geçin ve alanınızda kapsamlı bir test yapın.

Temmuz 2019'dan önce alanlar arasında standartlaştırma eksikliği olduğu için bir geliştiricinin yapması gereken tüm değişiklikleri ele almak zordur. Bu doküman olası tüm değişiklikleri kapsamaya çalışır, ancak daha fazla bilgi için lütfen şuradaki bölümü okuyun: yeni sürüme geçme yardımı alma.

Tehlike alanları

Tehlike alanları, API'nin değiştiği bilinen yerlerdir ve alanınız bozuk.

Blockly.Field.register

Alanlar artık Blockly.Field.register(); üzerinden kayıtlı değil. Her biri 100'den az gösterim alan artık kayıt işlemini gerçekleştiren bir FieldRegistry ad alanıdır.

Blockly.Field.register('my_field_name', myFieldClass);

Şu hale gelir:

Blockly.fieldRegistry.register('my_field_name', myFieldClass);

setText

setText işlevi artık Blockly çekirdeği tarafından çağrılmamaktadır. Bu nedenle, setText fonksiyonunun değer işleme bir dizi işlev içeren getText işlevi ve oluşturma işlevleri (setText işlevinizin tam olarak ne yaptığına bağlı olarak).

CustomFields.UpgradeField.prototype.setText = function(newText) {
  // Do validation.
  if (typeof newText != 'string' || newText === this.text_) {
    return;
  }

  // Fire event.
  if (this.sourceBlock_ && Blockly.Events.isEnabled()) {
    Blockly.events.fire(new Blockly.Events.BlockChange(
        this.sourceBlock_, 'field', this.name, this.text_, newText
    ));
  }

  // Update text value.
  this.text_ = 'prefix' + newText;

  // Rerender.
  this.size_.width = 0;
};

Şu hale gelir:

CustomFields.UpgradeField.prototype.doClassValidation_ = function(newValue) {
  if (typeof newValue != 'string') {
    return null;
  }
  return newValue;
};

CustomFields.UpgradeField.prototype.getText = function() {
  return  'prefix' + this.value_;
}

Blockly otomatik olarak şunları işler:

  • Yeni değerin eski değerden farklı olup olmadığı kontrol ediliyor.
  • Değer güncelleniyor.
  • Değişiklik etkinliklerini tetikleme.
  • Alan yeniden işleniyor.

Yapmanız gerekenler:

ziyaret edin.

Önerilen yükseltmeler, alan API'sinin değiştiği yerlerdir. Ancak değişiklik yapmamayı seçerseniz alanınız büyük olasılıkla çalışmaya devam edecektir.

SERELLEŞTİRİLEBİLİRLİK

EDITABLE ve SERIALIZABLE mülkleri hakkında daha fazla bilgi için Düzenlenebilir ve serileştirilebilir özellikler.

CustomFields.UpgradeField.prototype.SERIALIZABLE = true;

Aşağıdaki uyarı göz ardı edilebilir ancak SERIALIZABLE tanımlayarak bu sorunu çözebilirsiniz mülk:

Detected an editable field that was not serializable. Please define
SERIALIZABLE property as true on all editable custom fields. Proceeding
with serialization.

Yukarıdaki uyarı, Blockly’nin alanına serileştirilecek (EDITABLE özelliği doğru olduğu için) ancak emin olamazsınız.SERIALIZABLE Bir olduğu gibi bırakın, her şey düzgün çalışacak ve alanınız ancak konsol uyarıları alırsınız.

size_.width

this.size_.width = 0;

Şu hale gelir:

this.isDirty_ = true;

Aşağıdaki uyarı göz ardı edilebilir ancak isDirty_ ayarlayarak bu sorunu çözebilirsiniz özelliğini kullanın:size_.width

Deprecated use of setting size_.width to 0 to rerender a field. Set
field.isDirty_ to true instead.

Yukarıdaki uyarı, Blockly'nin bir öğeyi yeniden oluşturmak için eski bir yöntem kullandığınızı algıladığı anlamına gelir. ve yeni yöntemi kullanmanızı istiyorum.

isDirty_ mülkü hakkında daha fazla bilgi için bkz. isDirty_.

init

init işlevi bir şablon haline getirildi işlevini Alt sınıflarda yinelenen kodları azaltın.

CustomFields.UpgradeField.prototype.init = function() {
  if (this.fieldGroup_) {
    // Already initialized once.
    return;
  }

  // Call superclass.
  CustomFields.UpgradeField.superClass_.init.call(this);

  // Create DOM elements.
  this.extraDom_ = Blockly.utils.dom.createSvgElement('image',
      {
        'height': '10px',
        'width': '10px'
      });
  this.extraDom_.setAttributeNS('http://www.w3.org/1999/xlink',
      'xlink:href', 'image.svg');
  this.extraDom_.style.cursor = 'pointer';
  this.fieldGroup_.appendChild(this.extraDom_);

  // Bind events.
  this.mouseOverWrapper_ =
    Blockly.browserEvents.bind(
        this.getClickTarget_(), 'mouseover', this, this.onMouseOver_);
  this.mouseOutWrapper_ =
    Blockly.browserEvents.bind(
        this.getClickTarget_(), 'mouseout', this, this.onMouseOut_);

  // Render.
  this.setValue(this.getValue());
};

Şu hale gelir:

CustomFields.UpgradeField.prototype.initView = function() {
  CustomFields.UpgradeField.superClass_.initView.call(this);

  this.extraDom_ = Blockly.utils.dom.createSvgElement('image',
      {
        'height': '10px',
        'width': '10px'
      });
  this.extraDom_.setAttributeNS('http://www.w3.org/1999/xlink',
      'xlink:href', 'image.svg');
  this.extraDom_.style.cursor = 'pointer';
  this.fieldGroup_.appendChild(this.extraDom_);
};

CustomFields.UpgradeField.prototype.bindEvents_ = function() {
  CustomFields.UpgradeField.superClass_.bindEvents_.call(this);

  this.mouseOverWrapper_ =
    Blockly.bindEvent_(
        this.getClickTarget_(), 'mouseover', this, this.onMouseOver_);
  this.mouseOutWrapper_ =
    Blockly.bindEvent_(
        this.getClickTarget_(), 'mouseout', this, this.onMouseOut_);
};

Yani, blockly artık aşağıdaki işlemleri otomatik olarak gerçekleştiriyor:

  • Alanın başlatılıp başlatılmadığı kontrol ediliyor.
  • fieldGroup_ oluşturuluyor.
  • Alan oluşturuluyor.
  • Bağlama ipucu ve düzenleyici etkinliklerini gösterin.

Yapmanız gerekenler:

ziyaret edin.

onMouseDown_

CustomFields.UpgradeField.prototype.onMouseDown_ = function(e) {
  // ...
};

Şu hale gelir:

CustomFields.UpgradeField.prototype.showEditor_ = function() {
  // ...
}

Fareyi işlemek için showEditor_ işlevini geçersiz kılmanızı öneririz girişin iletilmesine izin veren onMouseDown_ işlevi yerine tıklama sayısı elinizin altındadır.

Düzenleyiciler hakkında daha fazla bilgi için Düzenleyenler başlıklı makaleyi inceleyin.

setValue

setValue işlevi artık bir şablon işlevini Alt sınıflarda yinelenen kodları azaltın. setValue fonksiyonunuz mantık içeriyorsa yeniden düzenlemenizi, örneğin aşağıdaki konumda açıklanan değer işleme yollarına Değer işleme.

text_

Sitenizin text_ özelliğine hiçbir zaman erişmemenizi veya alanına doğrudan girin. Bunun yerine getText işlevi kullanıcının okuyabileceği metne erişmek için kullanılan setValue işlevi değerini güncelleyin.

Bir alanın değeri ve metni hakkında daha fazla bilgi için bkz. Bir tarlanın anatomisi.

Yeni sürüme geçiş yardımı alma

Sağlanacak bilgiler

Yardım isterken şu soruları sormanız en iyisidir:

Önerilmez: "Bu alanda sorun nedir?"

"Bu alanı yeni sürüme geçirmeme yardım et" de önerilmez.

Önerilen: "Alan metni doğru şekilde güncellenmiyor."

Size yardımcı olan kişilere kaynak sağlamanız da gereklidir. Bu dosyaları diğer kullanıcılar tarafından kolayca kullanılabilir olmalıdır.

Önerilmez:

  • Kod görüntüleri.
  • Eksik kod.

Önerilen:

  • Alan kodunu metin biçiminde tamamlayın.
  • Kötü alan davranışını gösteren GIF resimleri.
  • Hatalı alan davranışını yeniden oluşturma adımları.
  • Yeni sürüme geçtiğiniz bloklu sürüm.

Yayınlayacağınız yer

blockly geliştiricide yeni sürüme geçiş sonrası sorular forumunu ziyaret edin.

Sorunun bloklu çekirdekle ilgili bir sorun olduğundan eminseniz bir sorun da yayınla geliştirmenizi sağlar. Bir sorun yayınlamaya karar verirseniz lütfen istenen bilgiler.