Yeni bir alan türü oluşturmadan önce, diğer alanlardan birinin yöntemler ne kadar iyi bir teknik olduğunu açıklayacağım. Uygulamanızın depoladığı bir veya mevcut bir değer türü için yeni bir kullanıcı arayüzü oluşturmak istiyorsanız büyük olasılıkla yeni bir alan türü oluşturmanız gerekir.
Yeni bir alan oluşturmak için aşağıdakileri yapın:
- Bir oluşturucu uygulayın.
- Bir JSON anahtarı kaydedin ve
fromJson
uygulayın. - Bloktaki kullanıcı arayüzü ve etkinliğin ilk kullanıma hazırlanmasını yönetme dinleyiciler.
- Etkinlik işleyicileri ortadan kaldırma (kullanıcı arayüzünün imha edilmesi siz).
- Değer işleme uygulayın.
- Erişilebilirlik için alanınızın değerini belirten bir metin ekleyin.
- Aşağıdakiler gibi ilave işlevler ekleyin:
- Alanınızın ek özelliklerini yapılandırın. Örneğin:
Bu bölümde, söz konusu dildeki içerikleri okuduğunuz ve bildiğiniz varsayılır Anatomi Alan.
Özel alan örneği için bkz. Özel Alanlar demo ,
Oluşturucu uygulama
Alanın başlangıç değerini ayarlamaktan alanın kurucusu sorumludur ve isteğe bağlı olarak yerel bir doğrulayın. Özel alanın oluşturucusu, bağımsız olarak kaynak bloku başlatma sırasında çağrılır kaynak bloğun JSON veya JavaScript'te tanımlanıp tanımlanmadığını kontrol eder. Dolayısıyla, alanının yapım sırasında kaynak bloka erişimi yok.
Aşağıdaki kod örneği, GenericField
adlı özel bir alan oluşturur:
class GenericField extends Blockly.Field {
constructor(value, validator) {
super(value, validator);
this.SERIALIZABLE = true;
}
}
Yöntem imzası
Alan oluşturucuları genellikle bir değer ve yerel doğrulayıcı alır. Değer
isteğe bağlıdır ve bir değer iletmezseniz (veya sınıftan geçemeyen bir değer iletirseniz)
doğrulamasının ardından, üst sınıfın varsayılan değeri kullanılır.
Field
sınıfını varsayılan olarak seçerseniz bu değer null
olur. Bu varsayılan ayarı istemiyorsanız
uygun bir değer ilettiğinizden emin olun. Doğrulayıcı parametresi yalnızca
gösterilir ve genellikle isteğe bağlı olarak işaretlenir. Daha fazla bilgi edinin
hakkında daha fazla bilgi edinmek için Doğrulayıcılar
dokümanlar için tıklayın.
Yapı
Oluşturucunuzun içindeki mantık şu akışı izlemelidir:
- Devralınan süper oluşturucuyu çağırın (tüm özel alanlar şuradan devralınmalıdır:
Blockly.Field
veya alt sınıflarından birini) kullanarak değeri doğru şekilde başlatın. ve alanınız için yerel doğrulayıcıyı ayarlayın. - Alanınız serileştirilebiliyorsa ilgili özelliği kurucusu. Düzenlenebilir alanlar serileştirilebilmelidir ve alanlar düzenlenebilir olmalıdır olduğundan emin değilseniz bu özelliği büyük olasılıkla "doğru" seri haline getirilemez.
- İsteğe bağlı: Ek özelleştirme uygulayın (örneğin, Etiket alanları) bir css sınıfının iletilmesine izin verir. Bu sınıf, daha sonra metne uygulanır.
JSON ve kayıt
JSON blokunda
tanımlar,
alanları bir dizeyle açıklanır (ör. field_number
, field_textinput
).
Blockly, bu dizelerden alan nesnelerine ve çağrılara giden bir eşleme sağlar.
fromJson
.
Alan türünüzü bu haritaya eklemek için Blockly.fieldRegistry.register
numaralı telefonu arayın,
alan sınıfını ikinci bağımsız değişken olarak geçirmektir:
Blockly.fieldRegistry.register('field_generic', GenericField);
fromJson
işlevinizi de tanımlamanız gerekir. Uygulamanız
önce herhangi bir dizenin referansını kaldırın
tablo
kullanan referanslar
replaceMessageReferences,
ve ardından değerleri oluşturucuya iletir.
GenericField.fromJson = function(options) {
const value = Blockly.utils.parsing.replaceMessageReferences(
options['value']);
return new CustomFields.GenericField(value);
};
Başlatılıyor
Alanınız oluşturulduğunda temel olarak yalnızca bir değer içerir. Başlatma işlemi, DOM'nin oluşturulduğu yerdir; model de oluşturulur (alan vardır) ve etkinlikler bağlıdır.
On-Block ekran
Başlatma sırasında ihtiyacınız olacak her şeyi oluşturmak sizin sorumluluğunuzdadır alanın blok ekranında gösterilir.
Varsayılanlar, arka plan ve metin
Varsayılan initView
işlevi, açık renkli bir rect
öğesi ve bir
text
öğesi. Alanınızda bunların her ikisine de ek olarak ekstra
gibi bir öğe kullanıyorsanız, bu işlevin geri kalanını eklemeden önce üst sınıf initView
işlevini
DOM öğeleri. Alanınızda bu özelliklerden yalnızca birine sahip olmasını istiyorsanız
öğeleri için createBorderRect_
veya createTextElement_
işlevlerini kullanabilirsiniz.
DOM oluşturma işlemini özelleştirme
Alanınız genel bir metin alanıysa (ör. Metin
Giriş),
DOM oluşturma işlemi sizin için gerçekleştirilecek. Aksi takdirde,
sırasında ihtiyacınız olacak DOM öğelerini oluşturmak içininitView
oluşturmak sizin işiniz.
Örneğin, bir açılır liste hem resimler hem de metin içerebilir. initView
içinde
tek bir resim öğesi ve tek bir metin öğesi oluşturur. Ardından render_
sırasında
etkin öğeyi gösterir, diğerini ise öğenin türüne göre gizler.
tercih edildi.
DOM öğeleri oluşturmak için
Blockly.utils.dom.createSvgElement
yöntemini veya geleneksel DOM oluşturma işlemini kullanarak
yöntemlerine göz atın.
Bir alanın blok üzerinde gösterimi için gerekenler:
- Tüm DOM öğeleri, alanın
fieldGroup_
alt öğesi olmalıdır. Alan grubu otomatik olarak oluşturulur. - Tüm DOM öğeleri, alanın bildirilen boyutlarının içinde kalmalıdır.
Bkz. Oluşturma bölümünü inceleyebilirsiniz.
Metin Simgeleri Ekleme
Bir alanın metnine simge eklemek isterseniz (ör.
Açı
alanın derece simgesi), simge öğesini (genellikle
<tspan>
) doğrudan alanın textElement_
öğesine bağlayın.
Giriş etkinlikleri
Varsayılan olarak alanlar, ipucu etkinliklerini ve fareyle üzerine gelme etkinliklerini kaydeder (bu alanlar için kullanılır ve)
gösteriliyor
düzenleyiciler) girin.
Diğer etkinlik türlerini dinlemek istiyorsanız (ör.
alanın bindEvents_
işlevini geçersiz kılmanız gerekir.
bindEvents_() {
// Call the superclass function to preserve the default behavior as well.
super.bindEvents_();
// Then register your own additional event listeners.
this.mouseDownWrapper_ =
Blockly.browserEvents.conditionalBind(this.getClickTarget_(), 'mousedown', this,
function(event) {
this.originalMouseX_ = event.clientX;
this.isMouseDown_ = true;
this.originalValue_ = this.getValue();
event.stopPropagation();
}
);
this.mouseMoveWrapper_ =
Blockly.browserEvents.conditionalBind(document, 'mousemove', this,
function(event) {
if (!this.isMouseDown_) {
return;
}
var delta = event.clientX - this.originalMouseX_;
this.setValue(this.originalValue_ + delta);
}
);
this.mouseUpWrapper_ =
Blockly.browserEvents.conditionalBind(document, 'mouseup', this,
function(_event) {
this.isMouseDown_ = false;
}
);
}
Bir etkinliğe bağlamak için genellikle
Blockly.utils.browserEvents.conditionalBind
işlevini kullanın. Bu bağlama etkinlikleri, sırasındaki ikincil temasları filtreler
kullanır. İşleyicinizin devam eden bir sürüklemenin ortasında bile çalışmasını istiyorsanız
URL adresini
Blockly.browserEvents.bind
işlevini kullanın.
İmha
Alanın bindEvents_
içinde herhangi bir özel etkinlik işleyici kaydettiyseniz
işlevinin dispose
işlevi içindeki kaydının iptal edilmesi gerekir.
Google Arama'yı doğru şekilde
görüntüleyin
(tüm DOM öğelerini fieldGroup_
öğesine ekleyerek), ardından
alanın DOM'si otomatik olarak imha edilir.
Değer İşleme
→ Bir alanın değeri ile metni arasındaki fark hakkında daha fazla bilgi için alanına giriş yapın.
Doğrulama sırası
Sınıf doğrulayıcı uygulama
Alanlar yalnızca belirli değerleri kabul etmelidir. Örneğin, sayı alanları yalnızca sayı kabul edin, renk alanları yalnızca renk vb. kabul etmelidir. sınıf ve bölge üzerinden doğrulayıcılar ile test edin. Sınıf doğrulayıcı, yerel doğrulayıcılarla aynı kuralları izler ancak bu kuralların da çalıştırılması kurucu ve dolayısıyla, kaynak bloka referans vermemelidir.
Alanınızın sınıf doğrulayıcısını uygulamak için doClassValidation_
yönergesini geçersiz kılın
işlevini kullanın.
doClassValidation_(newValue) {
if (typeof newValue != 'string') {
return null;
}
return newValue;
};
Geçerli değerleri işleme
setValue
içeren bir alana iletilen değer geçerliyse
doValueUpdate_
geri arama. Varsayılan olarak doValueUpdate_
işlevi:
value_
özelliğininewValue
olarak ayarlar.isDirty_
özelliğini ayarlar özelliğinitrue
olarak güncelleyin.
Yalnızca değeri depolamanız gerekiyorsa ve özel bir işlem yapmak istemiyorsanız
doValueUpdate_
öğesini geçersiz kılmanız gerekmez.
Alternatif olarak, aşağıdaki gibi işlemler de yapabilirsiniz:
newValue
kişilik özel depolama.- Diğer özellikleri
newValue
temelinde değiştirin. - Geçerli değerin geçerli olup olmadığını kaydedin.
doValueUpdate_
ayarını geçersiz kılmanız gerekir:
doValueUpdate_(newValue) {
super.doValueUpdate_(newValue);
this.displayValue_ = newValue;
this.isValueValid_ = true;
}
Geçersiz değerleri işleme
setValue
içeren alana iletilen değer geçersizse
doValueInvalid_
geri arama. doValueInvalid_
işlevi varsayılan olarak
hiçbir şey. Bu, varsayılan olarak geçersiz değerlerin gösterilmeyeceği anlamına gelir. Aynı zamanda
alanın yeniden işlenmeyeceği anlamına gelir.
isDirty_
özelliği ayarlanmaz.
Geçersiz değerleri görüntülemek istiyorsanız doValueInvalid_
değerini geçersiz kılmanız gerekir.
Çoğu durumda bir displayValue_
özelliğini
geçersiz değer, set
isDirty_
true
değerine gönder ve geçersiz kıl
render_
üzerindeki displayValue_
değerine göre güncellenmesi için
value_
.
doValueInvalid_(newValue) {
this.displayValue_ = newValue;
this.isDirty_ = true;
this.isValueValid_ = false;
}
Çok parçalı değerler
Alanınız çok parçalı bir değer (ör. listeler, vektörler, nesneler) içerdiğinde parçalarının bağımsız değerler gibi ele alınmasını isteyebilir.
doClassValidation_(newValue) {
if (FieldTurtle.PATTERNS.indexOf(newValue.pattern) == -1) {
newValue.pattern = null;
}
if (FieldTurtle.HATS.indexOf(newValue.hat) == -1) {
newValue.hat = null;
}
if (FieldTurtle.NAMES.indexOf(newValue.turtleName) == -1) {
newValue.turtleName = null;
}
if (!newValue.pattern || !newValue.hat || !newValue.turtleName) {
this.cachedValidatedValue_ = newValue;
return null;
}
return newValue;
}
Yukarıdaki örnekte her newValue
özelliği tek tek doğrulanmıştır. Sonra
bağımsız bir özellik ise doClassValidation_
işlevinin sonunda
geçersizse değer, cacheValidatedValue_
özelliğine önbelleğe alınır.
null
değeri döndürülüyor (geçersiz). Bağımsız doğrulanmış ile nesneyi önbelleğe alma
özellikleri
doValueInvalid_
işlevini kullanarak bunları ayrı ayrı ele alabilirsiniz.
Her birini yeniden doğrulamak yerine !this.cacheValidatedValue_.property
kontrolü
ayrı ayrı koyabilirsiniz.
Çok parçalı değerleri doğrulamak için kullanılan bu kalıp yerel doğrulayıcılar ancak şu anda bu kalıbı uygulamanın yolu yoktur.
isDirty_
isDirty_
,
setValue
fonksiyonunu ve alanın diğer bölümlerini de kontrol ederek, ilgili alanın
yeniden oluşturuldu. Alanın görünen değeri değiştiyse isDirty_
genellikle
true
olarak ayarlanmalıdır.
Metin
→ Bir alandaki metnin nerede kullanıldığı ve nasıl farklı olduğu hakkında bilgi için alanın değerine bakın, bkz. alanına giriş yapın.
Alanınızın metni alanınızın değerinden farklıysa
geçersiz kılma
getText
işlev
doğru metni girin.
getText() {
let text = this.value_.turtleName + ' wearing a ' + this.value_.hat;
if (this.value_.hat == 'Stovepipe' || this.value_.hat == 'Propeller') {
text += ' hat';
}
return text;
}
Düzenleyen oluşturma
showEditor_
işlevini tanımlarsanız Blockly şunları otomatik olarak dinler:
tıklama ve showEditor_
araması için uygun zamanda arama yapabilirsiniz. Herhangi bir HTML'yi görüntüleyebilirsiniz
düzenleyicinizde, DropDownDiv adı verilen iki özel div'den birini sarmalayarak
ve Blockly'nin kullanıcı arayüzünün üzerinde yüzen WidgetDiv.
DropDownDiv ve WidgetDiv karşılaştırması
DropDownDiv
, bağlı bir kutunun içinde bulunan düzenleyicileri sağlamak için kullanılır.
kullanabilirsiniz. Sahaya yakın bir yerde kalırken konumunu otomatik olarak belirler
çerçeveleri kullanabilirsiniz. Açı seçici ve renk seçici,
DropDownDiv
.
WidgetDiv
, şunları yapmak için kullanılır:
bir kutunun içinde bulunmayan düzenleyiciler sağlamak. Sayı alanlarında
alanı bir HTML metin giriş kutusuyla kaplamak için WidgetDiv. DropDownDiv
Ancak WidgetDiv bunu yapmaz. Öğelerin
manuel olarak konumlandırıldı. Koordinat sistemi
tıklayın. Metin girişi düzenleyicisi de
WidgetDiv
DropDownDiv örnek kodu
showEditor_() {
// Create the widget HTML
this.editor_ = this.dropdownCreate_();
Blockly.DropDownDiv.getContentDiv().appendChild(this.editor_);
// Set the dropdown's background colour.
// This can be used to make it match the colour of the field.
Blockly.DropDownDiv.setColour('white', 'silver');
// Show it next to the field. Always pass a dispose function.
Blockly.DropDownDiv.showPositionedByField(
this, this.disposeWidget_.bind(this));
}
WidgetDiv örnek kodu
showEditor_() {
// Show the div. This automatically closes the dropdown if it is open.
// Always pass a dispose function.
Blockly.WidgetDiv.show(
this, this.sourceBlock_.RTL, this.widgetDispose_.bind(this));
// Create the widget HTML.
var widget = this.createWidget_();
Blockly.WidgetDiv.getDiv().appendChild(widget);
}
Temizleme
Widget HTML'sini kaldırması için hem DropDownDiv hem de WidgetDiv tutma yeri ancak mevcut etkinlik işleyicilerinizi manuel olarak uygulanır.
widgetDispose_() {
for (let i = this.editorListeners_.length, listener;
listener = this.editorListeners_[i]; i--) {
Blockly.browserEvents.unbind(listener);
this.editorListeners_.pop();
}
}
dispose
işlevi, DropDownDiv
üzerinde null
bağlamında çağrılır. Şu tarihte:
WidgetDiv
bağlamında çağrıldığı WidgetDiv
. Her iki durumda da
en iyi seçenek
bağlama
yukarıdaki DropDownDiv
içinde gösterildiği gibi, dispose işlevi iletilirken işlev
ve WidgetDiv
örnek.
→ Editörlerin imha edilmesine özel olmayan verilerin imha edilmesi hakkında bilgi için bkz. Atma.
Blok üzerindeki ekran güncelleniyor
render_
işlevi, alanın bloktaki ekranını eşleşecek şekilde güncellemek için kullanılır
anlamak önemlidir.
Yaygın örnekler şunlardır:
- Metni değiştirme (açılır menü)
- Rengi (renk) değiştir
Varsayılanlar
Varsayılan render_
işlevi, görüntülenen metni
getDisplayText_
işlevini kullanın. getDisplayText_
işlevi, alanın value_
özelliğini döndürür
maksimum metne uyacak şekilde kısaltıldıktan sonra dizeye dönüştürme
seçeceğiz.
Varsayılan engelleme ekranını ve varsayılan metin davranışını kullanıyorsanız
çalışır, render_
geçersiz kılmanıza gerek yoktur.
Varsayılan metin davranışı alanınızda işe yarıyor ancak alanınızın bloke durumu
display ek statik öğelere sahip. Varsayılan render_
öğesini çağırabilirsiniz.
fonksiyonunu kullanabilir, ancak alanın
boyut'a dokunun.
Varsayılan metin davranışı alanınızda işe yaramıyorsa veya
bloktaki ekran ek dinamik öğelere sahipse özelleştirmeniz gerekir:
render_
işlevini kullanın.
Oluşturma özelleştirme
Varsayılan oluşturma davranışı alanınızda çalışmıyorsa şunları yapmanız gerekir: özel oluşturma davranışını tanımlayabilirsiniz. Bu, özel ayarlar yapmaktan, arka plan renklerini güncellemekten farklı resim öğelerini kullanmaya başlayabilirsiniz.
Tüm DOM özelliği değişiklikleri yasaldır. Unutulmaması gereken iki nokta şunlardır:
- DOM oluşturma işlemi sırasında işlenmelidir: ilk kullanıma hazırlama, çünkü daha verimli.
size_
ayarını her zaman güncellemeniz gerekir. özelliğini kullanmanızı öneririz.
render_() {
switch(this.value_.hat) {
case 'Stovepipe':
this.stovepipe_.style.display = '';
break;
case 'Crown':
this.crown_.style.display = '';
break;
case 'Mask':
this.mask_.style.display = '';
break;
case 'Propeller':
this.propeller_.style.display = '';
break;
case 'Fedora':
this.fedora_.style.display = '';
break;
}
switch(this.value_.pattern) {
case 'Dots':
this.shellPattern_.setAttribute('fill', 'url(#polkadots)');
break;
case 'Stripes':
this.shellPattern_.setAttribute('fill', 'url(#stripes)');
break;
case 'Hexagons':
this.shellPattern_.setAttribute('fill', 'url(#hexagons)');
break;
}
this.textContent_.nodeValue = this.value_.turtleName;
this.updateSize_();
}
Boyut güncelleniyor
Bir alanın size_
özelliğinin güncellenmesi,
blok oluşturma kodu alanın nasıl konumlandırılacağına bakalım. Bunu öğrenmenin en iyi yolu
size_
tam olarak neyin olması gerektiğini deneyerek olur.
updateSize_() {
const bbox = this.movableGroup_.getBBox();
let width = bbox.width;
let height = bbox.height;
if (this.borderRect_) {
width += this.constants_.FIELD_BORDER_RECT_X_PADDING * 2;
height += this.constants_.FIELD_BORDER_RECT_X_PADDING * 2;
this.borderRect_.setAttribute('width', width);
this.borderRect_.setAttribute('height', height);
}
// Note how both the width and the height can be dynamic.
this.size_.width = width;
this.size_.height = height;
}
Eşleşen blok renkleri
Alanınızdaki öğelerin, bulundukları blokun renkleriyle eşleşmesini istiyorsanız
applyColour
yöntemini geçersiz kılmanız gerekir. Birlikte çalıştığınız
renge erişmek için bloğun stil özelliğini kullanabilirsiniz.
applyColour() {
const sourceBlock = this.sourceBlock_;
if (sourceBlock.isShadow()) {
this.arrow_.style.fill = sourceBlock.style.colourSecondary;
} else {
this.arrow_.style.fill = sourceBlock.style.colourPrimary;
}
}
Düzenlenebilirlik güncelleniyor
updateEditable
işlevi, alanınızın görünümünü değiştirmek için kullanılabilir
düzenlenebilir olup olmamasına bağlıdır. Varsayılan işlev, bunu
arka plan düzenlenebilir değilse fareyle üzerine gelme yanıtı (kenarlık) içerir/içermez.
Blok üzerindeki ekran, düzenlenebilirliğine bağlı olarak boyutu değiştirmemelidir.
diğer tüm değişikliklere izin verilir.
updateEditable() {
if (!this.fieldGroup_) {
// Not initialized yet.
return;
}
super.updateEditable();
const group = this.getClickTarget_();
if (!this.isCurrentlyEditable()) {
group.style.cursor = 'not-allowed';
} else {
group.style.cursor = this.CURSOR;
}
}
Serileştirme
Serileştirme, alan durumunu kullandığınızdan emin olun.
Çalışma alanınızın durumu, alanın değerini her zaman içerir ancak diğer durumları da (ör. alanınızın kullanıcı arayüzünün durumu) ekleyin. Örneğin, alanı, kullanıcının ülkeleri seçmesine olanak tanıyan yakınlaştırılabilir bir haritaydı. zum düzeyini de serileştirir.
Alanınız serileştirilebiliyorsa SERIALIZABLE
özelliğini
true
.
Blockly, alanlar için iki grup serileştirme kancası sağlar. Bir çift kanca yeni JSON serileştirme sistemiyle çalışırken diğer çift XML serileştirme sistemini kullanmanız gerekir.
saveState
ve loadState
saveState
ve loadState
, yeni JSON ile çalışan serileştirme kancalarıdır.
serileştirme sistemidir.
Bazı durumlarda bunları sağlamanız gerekmez. Varsayılan değer
işe yarayacaktır. (1) alanınız tabandaki temelin doğrudan alt sınıfıysa
Blockly.Field
sınıfı, (2) değeriniz JSON seri yapılabilir bir
ve (3) yalnızca Google Ads dönüşüm izleme özelliğini
değeri seri hâlinde bırakırsanız varsayılan uygulama düzgün çalışacaktır.
Aksi takdirde, saveState
fonksiyonunuz seri hale getirilebilir bir JSON değeri döndürecektir
nesne/değer. Ayrıca loadState
cihazınız
işlevi, aynı JSON serileştirilebilir nesnesini/değerini kabul etmeli ve
girin.
saveState() {
return {
'country': this.getValue(), // Value state
'zoom': this.getZoomLevel(), // UI state
};
}
loadState(state) {
this.setValue(state['country']);
this.setZoomLevel(state['zoom']);
}
Tam serileştirme ve veri yedekleme
saveState
, isteğe bağlı doFullSerialization
parametresini de alır. Bu
normalde farklı bir grup tarafından serileştirilmiş duruma referans veren alanlar tarafından kullanılır.
serileştirici (ör. yedekleme veri modelleri). Bu parametre,
referans verilen durum, blok seri durumdan çıkarıldığında kullanılamaz. Bu nedenle
alanı, serileştirmenin tamamını yapmalıdır. Örneğin bu,
Tek bir blok serileştirildiğinde veya bir blok kopyalanıp yapıştırıldığında.
Bunun için yaygın olarak kullanılan iki kullanım alanı şunlardır:
- Tek bir blok, yedekleme verilerinin tamamlandığı bir çalışma alanına yüklendiğinde model yoksa alan, modelin mevcut olup olmadığını kontrol etmek için veri modeli oluşturabilirsiniz.
- Bir blok kopyalanıp yapıştırıldığında alan her zaman yeni bir dolgu oluşturur veri modelini kullanır.
Bunu kullanan alanlardan biri yerleşik değişken alanıdır. Normalde seri hâlinde
referans aldığı değişkenin kimliğidir, ancak doFullSerialization
doğruysa
tüm durumunu seri hale getirir.
saveState(doFullSerialization) {
const state = {'id': this.variable_.getId()};
if (doFullSerialization) {
state['name'] = this.variable_.name;
state['type'] = this.variable_.type;
}
return state;
}
loadState(state) {
const variable = Blockly.Variables.getOrCreateVariablePackage(
this.getSourceBlock().workspace,
state['id'],
state['name'], // May not exist.
state['type']); // May not exist.
this.setValue(variable.getId());
}
Değişken alanı, değişkenin bir çalışma alanına yüklenmesi durumunda değişkeni mevcut değilse referansta bulunacak yeni bir değişken oluşturabilir.
toXml
ve fromXml
toXml
ve fromXml
, eski XML ile çalışan serileştirme kancalarıdır.
serileştirme sistemidir. Bu kancaları yalnızca gerektiğinde kullanın (ör.
(henüz taşınmamış eski bir kod tabanında) oturum açın. Aksi takdirde saveState
ve
loadState
.
toXml
fonksiyonunuz,
girin. Ayrıca fromXml
fonksiyonunuz aynı XML düğümünü kabul etmeli ve
devreye sokmuştuk.
toXml(fieldElement) {
fieldElement.textContent = this.getValue();
fieldElement.setAttribute('zoom', this.getZoomLevel());
return fieldElement;
}
fromXml(fieldElement) {
this.setValue(fieldElement.textContent);
this.setZoomLevel(fieldElement.getAttribute('zoom'));
}
Düzenlenebilir ve seri hale getirilebilir özellikler
EDITABLE
özelliği, alanda bunu belirten kullanıcı arayüzü olup olmayacağını belirler
çok önemli bir parçasıdır. Varsayılan olarak true
değerine ayarlanır.
SERIALIZABLE
özelliği, alanın serileştirilmesi gerekip gerekmediğini belirler. Google
varsayılan olarak false
değerine ayarlanır. Bu tesis true
ise şu bilgileri sağlamanız gerekebilir:
serileştirme ve seri durumdan çıkarma işlevleri (bkz.
Serileştirme).
İmleci özelleştirme
CURSOR
özelliği, kullanıcıların imleçle üzerine geldiklerinde göreceği imleci belirler.
girin. Geçerli bir CSS imleç dizesi olmalıdır. İmleç varsayılan olarak bu şekilde ayarlanır
yakalama imleci olan .blocklyDraggable
tarafından tanımlanır.