Blok tanımları, bir blokun nasıl görüneceğini ve nasıl bir davranış sergileyeceğini belirtir. rengi, şekli ve bağlanabileceği diğer blokları değiştirebilir.
JSON biçimi ile JavaScript API'sinin karşılaştırması
Blockly'de blokları iki şekilde tanımlayabilirsiniz: JSON nesneleri ve JavaScript işlevleri. JSON biçimi, yerelleştirmeyi yerelleştirmeyi belirli süreçlerin farklı kelime sıralarına sahip diller için JSON biçimi tercih edilir yöntemi kullanır.
Ancak, JSON biçimi; gelişmiş özellikleri doğrudan tanımlayamaz. doğrulayıcılar veya doğrulayıcılar olarak görürler. Bunlar JavaScript'te yazılmalıdır. Genellikle uzantılar.
Blockly'nin orijinal JavaScript uygulamasını kullanan uygulamalar da yazabilir ve Tanımları doğrudan alt düzey Blockly API işlev çağrılarına yönlendirin: inceleyebilirsiniz.
JSON
Blockly.defineBlocksWithJsonArray([{
"type": "string_length",
"message0": 'length of %1',
"args0": [
{
"type": "input_value",
"name": "VALUE",
"check": "String"
}
],
"output": "Number",
"colour": 160,
"tooltip": "Returns number of letters in the provided text.",
"helpUrl": "http://www.w3schools.com/jsref/jsref_length_string.asp"
}]);
JavaScript
Blockly.Blocks['string_length'] = {
init: function() {
this.appendValueInput('VALUE')
.setCheck('String')
.appendField('length of');
this.setOutput(true, 'Number');
this.setColour(160);
this.setTooltip('Returns number of letters in the provided text.');
this.setHelpUrl('http://www.w3schools.com/jsref/jsref_length_string.asp');
}
};
init
işlevi, bloğun şeklini oluşturur. Bu bağlamda
işlevi için this
anahtar kelimesi, oluşturulan gerçek bloktur.
Her iki örnek de aynı "string_length" değerini yükler engelleyebilirsiniz.
Web'de JSON biçimi, initJson
işlevi kullanılarak yüklenir.
Bu, iki biçimin Blockly web sayfalarında karıştırılmasına da olanak tanır. Evet
mümkün olduğunda blokunuzu JSON ile tanımlamayı ve JavaScript kullanmayı tercih etmeyi tercih ettik
yalnızca JSON'un desteklemediği blok tanımlarının bölümleri için.
Aşağıda, ağırlıklı olarak JSON kullanılarak tanımlanmış bir blok örneği verilmiştir. ancak dinamik bir ipucu içerecek şekilde JavaScript API kullanılarak genişletilir.
JavaScript
var mathChangeJson = {
"message0": "change %1 by %2",
"args0": [
{"type": "field_variable", "name": "VAR", "variable": "item", "variableTypes": [""]},
{"type": "input_value", "name": "DELTA", "check": "Number"}
],
"previousStatement": null,
"nextStatement": null,
"colour": 230
};
Blockly.Blocks['math_change'] = {
init: function() {
this.jsonInit(mathChangeJson);
// Assign 'this' to a variable for use in the tooltip closure below.
var thisBlock = this;
this.setTooltip(function() {
return 'Add a number to variable "%1".'.replace('%1',
thisBlock.getFieldValue('VAR'));
});
}
};
Blok rengi
Bir blokun birincil rengi JSON colour
özelliği tarafından tanımlanır.
block.setColour(..)
işlevi,
veya temaları kullanıp bir blok tanımlayarak
stiline sahip.
JSON
{
// ...,
"colour": 160,
}
JavaScript
init: function() {
// ...
this.setColour(160);
}
Blok rengi rehberini inceleyin inceleyebilirsiniz.
İfade Bağlantıları
Kullanıcılar, nextStatement
ve
previousStatement
bağlayıcı. Blockly'nin standart düzeninde bu bağlantılar
bloklar dikey olarak üst üste dizilmiş şekilde bulunuyor.
Önceki bağlayıcısı olan bir blokta çıkış bağlayıcısı ve tam tersi de geçerlidir. İfade bloğu terimi değer çıkışı olmayan bir blok anlamına gelir. Bir ifade bloğunda genellikle hem önceki hem de sonraki bağlantı.
nextStatement
ve previousStatement
bağlantıları şunlar olabilir:
yazıldı,
ancak bu özellik standart bloklar tarafından kullanılmaz.
Sonraki Bağlantı
Diğer ifadelerin yazılabilmesi için bloğun altında bir nokta oluşturur. üst üste yığılır. Sonraki bağlantıyı içeren ancak önceki bağlantısı olmayan bir blok genellikle bir etkinliği temsil eder ve değişken ile oluşturulacak şekilde yapılandırılabilir şapka da kullanabilirsiniz.
JSON
Yazılmadı:
{
...,
"nextStatement": null,
}
Yazılan (nadir):
{
"nextStatement": "Action",
...
}
JavaScript
Yazılmadı:
this.setNextStatement(true); // false implies no next connector, the default
Yazıldı (nadir):
this.setNextStatement(true, 'Action');
Önceki Bağlantı
Blokun bir yığın olarak bağlanabilmesi için en üstünde bir çentik oluşturur sağlayabilir.
Önceki bir bağlantıya sahip blokların çıkış bağlantısı olamaz.
JSON
Yazılmadı:
{
...,
"previousStatement": null,
}
Yazılan (nadir):
{
"previousStatement": "Action",
...
}
JavaScript
Yazılmadı:
this.setPreviousStatement(true); // false implies no previous connector, the default
Yazıldı (nadir):
this.setPreviousStatement(true, 'Action');
Çıkışı Engelle
Bir blokun üzerinde tek bir çıkış olabilir ve bu çıkış, üzerinde erkek yapboz konnektörü olarak gösterilir öncü bir çabadır. Çıkışlar, değer girişlerine bağlanır. Çıkışa sahip bloklar genellikle değer blokları olarak adlandırılır.
JSON
Yazılmadı:
{
// ...,
"output": null,
}
Yazıldı:
{
// ...,
"output": "Number",
}
JavaScript
Yazılmadı:
init: function() {
// ...
this.setOutput(true);
}
Yazıldı:
init: function() {
// ...
this.setOutput(true, 'Number');
}
Çıkış bağlayıcısı olan bloklarda önceki ifade çentiği de olamaz.
Girişleri Engelle
Bir blokta bir veya daha fazla giriş bulunur. Bu girişlerde her girişin bir sırası vardır alanlarında kalır ve bir bağlantıyla bitebilir. Birkaç tane yerleşik giriş türleridir.
- Değer girişi: Bir cihazın çıkış bağlantısına
değer bloğu için geçerlidir.
math_arithmetic
bloğu (toplama, çıkarma) iki değer girişi olan bir blok örneği. - İfade girişi: Bir ifade bloğunun önceki bağlantısını belirtir. İlgili içeriği oluşturmak için kullanılan İç içe yerleştirilmiş bölümü, bir ifade girişi örneğidir.
- Dummy giriş: Blok bağlantı yoktur. Aşağıdaki durumlarda yeni satır gibi davranır: blok, harici değer girişleri kullanacak şekilde yapılandırılır.
- Bitiş satırı girişi: Blok bağlantısı yoktur ve her zaman bir yeni satır.
Özel girişleri desteklemek için özel giriş de oluşturabilirsiniz oluşturma.
JSON biçimi ve JavaScript API'de, DMAIC ve PDCA gibi geri bildirim vermelidir.
JSON'deki Girişler ve Alanlar
JSON tanımlı bloklar, interpolasyon blokları bir dizi şeklinde yapılandırılır.
her interpolasyon jetonunun yer aldığı mesaj dizeleri ( message0
, message1
, ...)
(%1
, %2
, ...) bir alan veya giriş ucudur (böylece giriş bağlayıcısı
öğesi, ileti içinde oluşturulur) eşleşen JSON argsN
dizisine alınır. Bu biçim
uluslararası hale getirmeyi kolaylaştırmayı amaçlıyor.
JSON
{
"message0": "set %1 to %2",
"args0": [
{
"type": "field_variable",
"name": "VAR",
"variable": "item",
"variableTypes": [""]
},
{
"type": "input_value",
"name": "VALUE"
}
]
}
İnterpolasyon jetonları, args0
dizisiyle tamamen eşleşmelidir: Yinelenenler yok,
eksik olmamalıdır. Jetonlar herhangi bir sırada bulunabilir ve farklı
blok düzenini değiştirmek için diller.
İnterpolasyon jetonunun her iki tarafındaki metin boşluklardan kaldırılır.
%
karakterini kullanan metin (ör. bir yüzdeye atıfta bulunurken)
interpolasyon jetonu olarak yorumlanmaması için %%
.
Bağımsız değişkenlerin ve bağımsız değişken türlerinin sırası
engelleyebilirsiniz. Bu dizelerden birinin değiştirilmesi, bloğun düzenini tamamen değiştirebilir.
Bu, özellikle kelime sırasının farklı olduğu dillerde önemlidir
çok daha iyidir. "set %1 to %2"
(kullanıldığı şekilde) için varsayımsal bir dil kullanın
anahtar/değer çiftinin "put %2 in %1"
olarak değiştirilmesi gerekir. Değiştiriliyor
(ve JSON'un geri kalanını bırakarak)
dokunulmayan) aşağıdaki blokla sonuçlanır:
Blockly, alanların sırasını otomatik olarak değiştirdi, sahte bir giriş oluşturdu. ve harici girişlerden dahili girişlere geçirildi.
Blockly, mesajdaki tüm yeni satır karakterlerini (\n
) otomatik olarak değiştirir
bir dize.
JSON
{
"message0": "set %1\nto %2",
"args0": [
{
"type": "field_variable",
"name": "VAR",
"variable": "item",
"variableTypes": [""]
},
{
"type": "input_value",
"name": "VALUE"
}
]
}
Bağımsız değişkenler
Her mesaj dizesi, aynı sayıya sahip bir args
dizisiyle eşlenir. Örneğin,
örneğin, message0
, args0
ile gider. İnterpolasyon jetonları
(%1
, %2
, ...), args
dizisindeki öğelere işaret eder. Her nesnenin bir
type
dizesi. Parametrelerin geri kalanı türe bağlı olarak değişiklik gösterir:
Ayrıca, kendi özel alanlarınızı tanımlayabilir ve özel girişleri kullanabilir ve bunları bağımsız değişken olarak iletir.
Her nesnenin bir alt
alanı da olabilir. Blockly,
nesnenin type
değerini tanırsa onun yerine alt
nesnesi kullanılır. Örneğin,
Örneğin, Blockly'ye field_time
adlı yeni bir alan eklenirse,
bu alanda, eski sürümler için bir field_input
yedeği tanımlamak üzere alt
kullanılabilir
:
JSON
{
"message0": "sound alarm at %1",
"args0": [
{
"type": "field_time",
"name": "TEMPO",
"hour": 9,
"minutes": 0,
"alt":
{
"type": "field_input",
"name": "TEMPOTEXT",
"text": "9:00"
}
}
]
}
Bir alt
nesnesi, kendi alt
nesnesine sahip olabilir ve bu nedenle zincirlemeye izin verir.
Sonuç olarak Blockly, args0
dizisinde (
alt
nesneleri atlanırsa) bu nesne atlanır.
message
dizesi, girişte yer almayan metin veya alanlarla bitiyor.
Dolayısıyla, bir bloktaki son giriş model bir girişse bu
args
dizisidir ve message
ile interpolasyon yapılması gerekmez. İlgili içeriği oluşturmak için kullanılan
otomatik girişin otomatik olarak eklenmesi, çevirmenlerin dönüşüm gerçekleştirmesine
message
öğesini kullanarak JSON'ın geri kalanını değiştirmenize gerek kalmaz. Örnek görüntüleyin
"set %1 to %2"
(sahte giriş yok) ve "put %2 in %1"
(model giriş eklendi)
bu sayfadan yararlanabilirsiniz.
implicitAlign0
Nadir durumlarda, otomatik olarak oluşturulan model girişin hizalanması gerekir.
"RIGHT"
veya "CENTRE"
. Belirtilmezse varsayılan olarak "LEFT"
kullanılır.
Aşağıdaki örnekte message0
, "send email to %1 subject %2 secure %3"
değeridir
ve Blockly üçüncü satır için otomatik olarak sahte giriş ekler. Ayar
implicitAlign0
- "RIGHT"
arası, bu satırı sağa hizalı olmaya zorlar. Bu
hizalama, JSON dosyasında açıkça tanımlanmamış tüm girişler için geçerlidir
yeni satır karakterlerinin yerini alan bitiş satırı girişleri dahil blok tanımı
İletide ('\n'
) var. Kullanımdan kaldırılmış lastDummyAlign0
mülkü de mevcuttur
implicitAlign0
ile aynı davranışa sahiptir.
RTL (Arapça ve İbranice) için bloklar tasarlarken sol ve sağ kısımları tersine çevirin.
Bu nedenle "RIGHT"
, alanları sola hizalar.
message1
, args1
implicitAlign1
Bazı bloklar doğal olarak iki veya daha fazla ayrı bölüme ayrılır. İki satırlı şu tekrarlanan bloku düşünün:
Bu engelleme tek bir mesajla açıklanmışsa message0
özelliği
"repeat %1 times %2 do %3"
olacaktı. Bu dize bir çevirmen için tuhaf.
%2
değişikliğinin ne anlama geldiğini açıklamak zordur. %2
modeli
giriş bazı dillerde bile istenmeyebilir. Ayrıca birden fazla
ikinci satırdaki metni paylaşmak isteyen bloklara ekleyebilirsiniz. Daha iyi bir yaklaşım
JSON'un birden fazla mesaj ve bağımsız değişken özelliklerini kullanması içindir:
JSON
{
"type": "controls_repeat_ext",
"message0": "repeat %1 times",
"args0": [
{"type": "input_value", "name": "TIMES", "check": "Number"}
],
"message1": "do %1",
"args1": [
{"type": "input_statement", "name": "DO"}
],
"previousStatement": null,
"nextStatement": null,
"colour": 120
}
İstediğiniz sayıda message
, args
ve implicitAlign
özelliği tanımlanabilir
JSON biçiminde, 0 ile başlayacak ve sırayla artacak şekilde ayarlanır. Lütfen
Blok Fabrikası iletileri birden çok bölüme ayıramaz, ancak
bunu manuel olarak yapmak kolaydır.
JavaScript'te Girişler ve Alanlar
JavaScript API, her giriş türü için bir append
yöntemi içerir:
JavaScript
this.appendEndRowInput()
.appendField('for each')
.appendField('item')
.appendField(new Blockly.FieldVariable());
this.appendValueInput('LIST')
.setCheck('Array')
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField('in list');
this.appendStatementInput('DO')
.appendField('do');
this.appendDummyInput()
.appendField('end');
Her ekleme yöntemi, kod oluşturucular tarafından kullanılan bir tanımlayıcı dizesi alabilir. Sahte ve bitiş satırı girişlerine nadiren referansta bulunulması gerekir ve tanımlayıcı genellikle bırakılır ayarlanmamıştır.
JavaScript API, ekleme için genel bir appendInput
yöntemi de içerir
özel girişler. Bu örnekte, tanımlayıcının
doğrudan özel girişinizin oluşturucusuna geçirilir.
JavaScript
this.appendInput(new MyCustomInput('INPUT_NAME'))
.appendField('an example label')
appendInput
yöntemlerinin tümü (genel ve genel olmayan)
Böylece yöntem zincirini kullanarak daha fazla yapılandırılabilirler. Orada
girişleri yapılandırmak için kullanılan üç yerleşik yöntemdir.
setCheck
JavaScript
input.setCheck('Number');
Bu isteğe bağlı işlev, bağlı girişlerin tür kontrolü için kullanılır. Verilmişse null bağımsız değişkeni varsa varsayılan olarak bu giriş herhangi bir bloka bağlanabilir. Ayrıntılar için Tür Kontrolleri bölümüne bakın.
setAlign
JavaScript
input.setAlign(Blockly.inputs.Align.RIGHT);
Bu isteğe bağlı işlev, alanları hizalamak için kullanılır (aşağıya bakın). Üç tane var
bu işleve bağımsız değişken olarak iletilebilecek, açıklayıcı değerler:
Blockly.inputs.Align.LEFT
, Blockly.inputs.Align.RIGHT
ve
Blockly.inputs.Align.CENTER
.
RTL (Arapça ve İbranice) için bloklar tasarlarken sol ve sağ kısımları tersine çevirin.
Bu nedenle Blockly.inputs.Align.RIGHT
, alanları sola hizalar.
appendField
Bir giriş oluşturulduktan ve appendInput
içeren bir bloğa eklendikten sonra, bir
isteğe bağlı olarak girişe istenen sayıda alan ekleyebilir. Bu alanlar
genellikle her girişin amacını açıklayan etiket olarak kullanılır.
JavaScript
input.appendField('hello');
En basit alan öğesi metindir. Blockly'nin kuralı, tüm özel isimler (ör. Google, SQL) hariç küçük harfli metinler.
Bir giriş satırı, herhangi bir sayıda alan öğesi içerebilir. Birden çok appendField
Çağrılar, birkaç alanın aynı kullanıcıya etkili bir şekilde eklenebilmesi için birbirine zincirlenebilir
giriş satırını kullanın.
JavaScript
input.appendField('hello')
.appendField(new Blockly.FieldLabel('Neil', 'person'));
appendField('hello')
çağrısı aslında uygunsuz bir etiket kullanmanın kısayolu
FieldLabel oluşturucusu: appendField(new Blockly.FieldLabel('hello'))
.
Yapıcıyı kullanmak isteyeceği tek sefer,
metnin bir CSS kuralı kullanılarak biçimlendirilebilmesi için sınıf adını kullanın.
Satır içi - Harici
Engellenen girişler, harici veya dahili olarak oluşturulabilir.
Blok tanımı, girişlerin yapılıp yapılmadığını kontrol eden isteğe bağlı bir boole değeri belirtebilir.
satır içi olup olmadıklarını görebilirsiniz. false
ise tüm değer girişleri harici olur (ör.
sol blok). true
ise tüm değer girişleri satır içi olur (ör.
sağ blokta) görürsünüz.
JSON
{
// ...,
"inputsInline": true
}
JavaScript
init: function() {
// ...
this.setInputsInline(true);
}
Tanımlanmamışsa Blockly, hangi modun etkin olduğunu tahmin etmek için bazı buluşsal yöntemler kullanır.
en iyisi. Blockly'nin doğru seçimi yaptığını varsayarsak bu alanı tanımsız bırakın
farklı dillerdeki çeviriler otomatik olarak mümkün olduğundan
farklı modları vardır. "set %1 to %2"
(harici girişler) ve
Bu sayfanın önceki kısımlarında "put %2 in %1"
(satır içi girişler) yer alır.
Bir blokta sayı gibi küçük girişler olması muhtemelse satır içi girişleri kullanın.
collapse
, içerik menüsünde bu seçeneği açıp kapatabilir.
yapılandırması etkinleştirilmiştir (araç kutusunda kategoriler varsa varsayılan olarak "doğru") değerine ayarlanır.
Alanlar
Alanlar, bir blok içindeki kullanıcı arayüzü öğelerinin çoğunu tanımlar. Bunlardan bazıları
dize etiketleri, resimler ve girişler
değişmez veri
kullanabilirsiniz. En basit örnek math_number
bloğudur.
Kullanıcının bir sayı yazmasına olanak tanımak için field_input
kullanıyor.
Alanlar, bloğa şu kullanılarak eklenir: appendField.
Blockly; metin girişleri, renk seçiciler, ve görseller. Kendi alanlarınızı da oluşturabilirsiniz.
→ Yerleşik alanlar hakkında daha fazla bilgi edinin.
→ Özel alan oluşturma hakkında daha fazla bilgi.
Simgeler
Simgeler, "meta" etiketli bir blokta kullanıcı arayüzü öğelerini tanımlar konu hakkında engelleyebilirsiniz.
Simgeler addIcon kullanılarak bloka eklenir.
Blockly, yorum simgeleri de dahil olmak üzere pek çok yerleşik simge sağlar ve uyarı simgeleri içerir. Kendi simgelerinizi de oluşturabilirsiniz.
→ Özel simge oluşturma hakkında daha fazla bilgi edinin.
İpuçları
İpuçları, kullanıcı faresini blokun üzerine getirdiğinde anında yardım sağlar. Metin uzunsa otomatik olarak kaydırılır.
JSON
{
// ...,
"tooltip": "Tooltip text."
}
JavaScript
init: function() {
this.setTooltip("Tooltip text.");
}
JavaScript API'de araç ipuçları da bir işlev olarak tanımlanabilir.
statik dize. Bu, dinamik yardıma olanak tanır. math_arithmetic
hakkında bilgi edinmek için
kullanılan açılır liste seçeneğine bağlı olarak değişen ipucu örneği
seçilir.
JavaScript
Blockly.Blocks['math_arithmetic'] = {
init: function() {
// ...
// Assign 'this' to a variable for use in the tooltip closure below.
var thisBlock = this;
this.setTooltip(function() {
var mode = thisBlock.getFieldValue('OP');
var TOOLTIPS = {
'ADD': Blockly.Msg.MATH_ARITHMETIC_TOOLTIP_ADD,
'MINUS': Blockly.Msg.MATH_ARITHMETIC_TOOLTIP_MINUS,
'MULTIPLY': Blockly.Msg.MATH_ARITHMETIC_TOOLTIP_MULTIPLY,
'DIVIDE': Blockly.Msg.MATH_ARITHMETIC_TOOLTIP_DIVIDE,
'POWER': Blockly.Msg.MATH_ARITHMETIC_TOOLTIP_POWER
};
return TOOLTIPS[mode];
});
}
};
JavaScript API'yi kullanarak, bloklar statik bir yerine bir işlev belirtebilir
dizesini döndürür. Bu, dinamik ipuçlarının kullanılmasına olanak tanır.
Örnek için bkz. math_arithmetic
.
Özelleştirme
Özel oluşturma sağlayarak ipucularınızın görünümünü de özelleştirebilirsiniz. işlevini kullanın. İki parametreyi kabul eden bir işlev oluşturun:
- İlk olarak, içeriği oluşturacağınız bir
<div>
öğesi - ikincisi de fareyle üzerine gelindiği ve bu öğelerin şunun için ipucunu
İşlevin gövdesinde istediğiniz içeriği
div. Fareyle üzerine gelinen blokta tanımlanan ipucu dizesini almak için
element
olan Blockly.Tooltip.getTooltipOfObject(element);
numarasını ara
yukarıdaki ikinci parametreyi kullanın.
Son olarak, Blockly'nin uygun zamanda çağırabilmesi için bu işlevi kaydedin:
Blockly.Tooltip.setCustomTooltip(yourFnHere);
Örnek için Özel İpuçları demosu.
Yardım URL'si
Engellemelerle ilişkili bir yardım sayfası olabilir. Bu,
kullanıcıları engellemek için bloku sağ tıklayıp "Yardım"ı seçerek
içerik menüsünden seçim yapabilirsiniz. Bu değer null
ise menü gri olur
çıkar.
JSON
{
// ...,
"helpUrl": "https://en.wikipedia.org/wiki/For_loop"
}
JavaScript
init: function() {
// ...
this.setHelpUrl('https://en.wikipedia.org/wiki/For_loop');
}
JavaScript API'yi kullanarak, bloklar statik bir yerine bir işlev belirtebilir dizesi döndüren, böylece dinamik yardıma olanak tanıyan bir URL dizesi döndürür.
İşleyicileri ve Doğrulayıcıları Değiştirme
Bloklarda, çalışma alanı (engelle ilgili olmayanlar dahil). Bunlar öncelikli olarak blokun uyarı metnini veya çalışmayacaktır.
İşlev, bir fonksiyonla setOnChange çağrısıyla eklenir ve Kullanmayı planlıyorsanız başlatma sırasında veya bir JSON uzantısı aracılığıyla tüm platformlarda kullanılabilir.
JSON
{
// ...,
"extensions":["warning_on_change"],
}
Blockly.Extensions.register('warning_on_change', function() {
// Example validation upon block change:
this.setOnChange(function(changeEvent) {
if (this.getInput('NUM').connection.targetBlock()) {
this.setWarningText(null);
} else {
this.setWarningText('Must have an input block.');
}
});
});
JavaScript
Blockly.Blocks['block_type'] = {
init: function() {
// Example validation upon block change:
this.setOnChange(function(changeEvent) {
if (this.getInput('NUM').connection.targetBlock()) {
this.setWarningText(null);
} else {
this.setWarningText('Must have an input block.');
}
});
}
}
Sistem, fonksiyonu çağırır ve
değişiklik etkinliği hakkında daha fazla bilgi edinin.
İşlev içinde this
, blok örneğini ifade eder.
Bu fonksiyon herhangi bir değişiklik üzerine çağrıldığı için, kullanılıyorsa geliştiriciler, dinleyici hızla koşar. Ayrıca çalışma alanında yapılacak değişikliklere dikkatli olmalıdır. yanıt verebilir.
controls_flow_statements
, logic_compare
ve procedures_ifreturn
sayfalarını inceleyin
bloklarına bakın.
Düzenlenebilir alanların giriş doğrulaması için kendi etkinlik işleyicileri olduğunu unutmayın ve yan etkilere yol açıyor.
Mutatör
Mutatörler, gelişmiş blokların şeklinin değişmesine izin verir. Bu değişimin en önemli nedeni,
Bileşen eklemek, kaldırmak veya yeniden düzenlemek için bir iletişim kutusu açan kullanıcılar. Mutatörler
mutator
anahtarıyla JSON üzerinden eklendi.
JSON
{
// ...,
"mutator":"if_else_mutator"
}
Blok başına yapılandırma
Engelleme örnekleri, nasıl davranacaklarını yapılandıran çeşitli özelliklere sahiptir temsil eder. Bunlar, çalışma alanını belirli özellikleri özellikleri (örneğin, tam olarak bir 'başlangıç' etkinliği vardır) veya odak noktası kullanıcının çabası (ör. bir eğitim).
Silinebilir Durumu
block.setDeletable(false);
Politika yanlış değerine ayarlandığında kullanıcı, engellemeyi silemez. Varsayılan engellemeler kolayca silebilirsiniz.
Tüm bloklar (silinemeyecekler de dahil) programatik olarak silinebilir:
block.dispose();
Düzenlenebilir Durum
block.setEditable(false);
Politika yanlış değerine ayarlandığında kullanıcı, engelleme alanlarını değiştiremez (ör. açılır listeler ve metin girişleri). Düzenlenebilir bloklar varsayılan olarak düzenlenebilir çalışmayacaktır.
Taşınabilir Durum
block.setMovable(false);
Yanlış değerine ayarlanırsa kullanıcı, bloğu doğrudan taşıyamaz. başka bir blokun alt öğesi olan taşınmaz blok ile bağlantısı kesilemez ancak üst öğe taşınırsa üst öğeyle birlikte taşınır. Bloklar düzenlenebilir bir çalışma alanında varsayılan olarak taşınabilir.
Herhangi bir blok (taşınamayanlar da dahil) çalışmayacaktır.
block.moveBy(dx, dy)
Çalışma alanındaki bir engellemenin başlangıç konumu varsayılan olarak (0, 0) olur.
Verileri engelle
this.data = '16dcb3a4-bd39-11e4-8dfc-aa07a5b093db';
Veri, bloğa eklenen isteğe bağlı ve rastgele bir dizedir. veri dizesinin kendisi ile serileştirilmesi. Buna, blok yinelendiğinde veya kopyalanıp yapıştırıldığından emin olun.
Bu, genellikle bir bloğu harici bir kaynakla ilişkilendirmek için kullanılır.
JSON'a serileştirildiğinde veriler blokta üst düzey bir mülk olarak depolanır:
{
"type": "my_block",
"data": "16dcb3a4-bd39-11e4-8dfc-aa07a5b093db",
// etc..
}
XML'e (eski iceboxed serileştirme sistemi) göre serileştirildiğinde veri dizesi
, blok içindeki bir <data></data>
etiketinde depolanır:
<block type="my_block">
<data>16dcb3a4-bd39-11e4-8dfc-aa07a5b093db</data>
<!-- etc... -->
</block>
Yıkım
Blokların bir destroy
kancası vardır. Bu kanca,
çalışmayacaktır. Bu, yedek veri modellerini yok etmek için kullanılabilir/harici
blokla ilişkili, artık ihtiyaç duyulmayan kaynaklar.
JSON
{
// ...,
"extensions":["destroy"],
}
Blockly.Extensions.registerMixin('destroy', {
destroy: function() {
this.myResource.dispose();
}
});
JavaScript
Blockly.Blocks['block_type'] = {
destroy: function() {
this.myResource.dispose();
}
}
destroy
yöntemi, blokun üst öğesi ortadan kaldırıldıktan sonra çağrılır.
evrilmeye
başlamaya çalışın.
İçerik Menüleri
Varsayılan olarak, blokların kullanıcıların aşağıdakileri yapmasına olanak tanıyan bir sağ tıklama içerik menüsü vardır: Örneğin yorum ekleme veya blokları kopyalama.
Tek bir bloğun içerik menüsünü aşağıdakileri yaparak devre dışı bırakabilirsiniz:
block.contextMenu = false;
Menüde gösterilen seçenekleri de özelleştirebilirsiniz. Menüyü özelleştirmek için
için
bağlam menüleri dokümanları.
Menüyü tek bir engelleme için özelleştirmek üzere şunları uygulayabilirsiniz:
customContextMenu
Bu fonksiyon, bir dizi menü seçeneğini alır ve
yerini değiştirir. Bu da hem öğe ekleyip hem de öğe çıkarabileceğiniz anlamına gelir.
Her menü seçeneği, üç özelliği olan bir nesnedir:
text
görünen metindir.enabled
bir boole değeridir. Bu seçenek devre dışı bırakıldığında gri renkte gösterilir metin.callback
, seçenek tıklandığında çağrılacak fonksiyondur.