Özel simge oluşturmak için IIcon
arayüzünü uygulamanız gerekir.
Bu, Blockly'ye simgenizin nasıl oluşturulmasını ve ne yapılmasını istediğinizi bildirir.
tıklanırsa ne yapılmalıdır, vb.
Zaten Icon
soyut sınıfını içereceğinden alt sınıflandırılmasını öneririz.
IIcon
içinde birçok yöntemin varsayılan uygulamalarını sunar
kullanır.
class MyIcon extends Blockly.icons.Icon {
// The constructor should always take in the source block so that svg elements
// can be properly created.
constructor(sourceBlock) {
super(sourceBlock);
}
}
Simgenin türünü belirtin
getType
yöntemi,
simgesini tıklayın. Simgeyi serileştirme amacıyla kaydetmek ve
simge getIcon
konumundan alınıyor.
JavaScript
getType() {
return new Blockly.icons.IconType('my_icon');
}
TypeScript
getType(): Blockly.icons.IconType<MyIcon> {
return new Blockly.icons.IconType<MyIcon>('my_icon');
}
Simgenin görünümünü oluşturun
Simgenin görünümü, blokta bulunan SVG öğelerini ifade eder.
Görünümü başlat
initView
yöntemi, sayfanızdaki SVG öğelerini oluşturduğunuz yerdir.
görebilirsiniz. Yeni öğeler
this.svgRoot
öğe. Simge açıldığında otomatik olarak temizlenirler
imha edilir.
Blockly.utils.dom
modülü temiz bir arayüz sunar.
için bu yöntemin kullanılmasıdır.
initView(pointerdownListener) {
if (this.svgRoot) return; // Already initialized.
// This adds the pointerdownListener to the svgRoot element.
// If you do not call `super` you must do this yourself.
super.initView(pointerdownListener);
Blockly.utils.dom.createSvgElement(
Blockly.utils.Svg.CIRCLE,
{
'class': 'my-css-class',
'r': '8',
'cx': '8',
'cy': '8',
},
this.svgRoot // Append to the svgRoot.
);
}
Bedeni döndürün
getSize
yöntemi, simgenin boyutunu döndürür. Dolayısıyla,
oluşturucu, bloğu bunun için yeterince geniş hale getirebilir.
Boyut, rastgele "çalışma alanı birimlerinde"dir (çalışma alanı olarak değişmez.) ).
getSize() {
return new Blockly.utils.Size(16, 16);
}
Sırayı belirleme
Simgelerin blok içinde statik bir sırası vardır. Örneğin, yerleşik mutatör yorum simgelerinin önünde her zaman yorum simgelerinin önünde gösterilir. uyarı simgeleri.
Sıralama, getWeight
tarafından döndürülen değerle kontrol edilir
yöntemidir. Daha az pozitif ağırlıklara sahip simgeler, daha fazla pozitif ağırlıkta olan simgeler
pozitif ağırlıklar da vardır.
getWeight() {
return 10;
}
Tıklama davranışını uygulayın
Birçok simge etkileşimlidir ve tıklandığında bir şeyler yapar. Örneğin,
yerleşik simgelerin tümü tıklandığında bir balon görünür. Şunları yapabilirsiniz:
bunu uygulamak için onClick
yöntemini kullanın.
onClick() {
// Do something when clicked.
}
Engelleme değişikliklerine yanıt verme
Bazı simgeler bloktaki değişikliklere, özellikle de bloktaki değişikliklere özellikleri de değiştirebilirsiniz.
Düzenlenebilirlik
Engellemenin etkin olup olmadığına bağlı olarak simgeniz,
düzenlenebilir veya düzenlenmez (örneğin, engelleme engellendiğinde tıklanabilir olmaması gerekir)
düzenlenebilir) updateEditable
yöntemini uygulayın. Bu yöntem
bloğun düzenlenebilir durumu değiştiğinde otomatik olarak çağrılır.
updateEditable() {
if (this.sourceBlock.isEditable()) {
// Do editable things.
} else {
// Do non-editable things.
}
}
Daraltılmışlık
Bazı simgeler engelleme daraltıldığında gösterilir ancak varsayılan olarak
değil. Simgenizin gösterilmesini istiyorsanız
true
değerini döndürmek için isShownWhenCollapsed
yöntemi.
isShownWhenCollapsed() {
return true;
}
Ardından, updateCollapsed
yöntemini geçersiz kılın.
updateCollapsed() {
// By default icons are hidden when the block is collapsed. We want it to
// be shown, so do nothing.
}
Simgeyi ortadan kaldırın
Simgeler, etkin olduklarında tüm dom öğelerini veya harici referansları temizlemelidir
bertaraftı. Varsayılan olarak, this.svgRoot
öğesine eklenen her şey
ancak diğer referansların manuel olarak temizlenmesi gerekir. Bu özellik,
dispose
yöntemi ile yapılır.
dispose() {
// Always call super!
super.dispose();
this.myBubble?.dispose();
this.myOtherReference?.dispose();
}