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:
- Değer doğrulama (
doClassValidation_
). - Alan metni (
getText
). - Alan kullanıcı arayüzü
Önerilen yükseltmeler
Ö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:
- Başka eklemeler
DOM öğeleri (
initView
). - Başka eklemeler
etkinlik bağlamaları (
bindEvents_
). - Etkinlik bağlamalarının kaldırılması (
dispose
).
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.