Uzantılar, başlatma sırasında bir blokta çalıştırılan işlevlerdir. Bunlar genellikle bir bloğa özel yapılandırma veya davranış ekler. Mixin'ler, bir bloğa özellik veya yardımcı işlev eklemenize olanak tanır ancak bunları hemen çalıştırmaz.
Uzantı veya karma öğeleri yalnızca JSON ile bir blok tanımlarken kullanmanız gerekir. Bir bloğu tanımlamak için JavaScript kullanıyorsanız başlatma işlevlerini doğrudan init
içinde çağırabilir ve doğrudan tanımaya yöntem veya özellikler ekleyebilirsiniz.
Uzantılar
Uzantılar, blok oluşturulurken belirli bir türdeki her blokta çalışan işlevlerdir. Örneğin, özel yapılandırma (ör. bloğun ipucunu ayarlama) veya özel davranış (ör. bloğa bir etkinlik dinleyici ekleme) ekleyebilirler.
// This extension sets the block's tooltip to be a function which displays
// the parent block's tooltip (if it exists).
Blockly.Extensions.register(
'parent_tooltip_extension',
function() { // this refers to the block that the extension is being run on
var thisBlock = this;
this.setTooltip(function() {
var parent = thisBlock.getParent();
return (parent && parent.getInputsInline() && parent.tooltip) ||
Blockly.Msg['MATH_NUMBER_TOOLTIP'];
});
});
Uzantıların bir dize anahtarıyla ilişkilendirilebilmesi için "kaydedilmesi" gerekir. Ardından, uzantıyı bloğa uygulamak için bu dize anahtarını blok türünüzün JSON tanımının extensions
mülküne atayabilirsiniz.
{
//...,
"extensions": ["parent_tooltip_extension",]
}
Ayrıca, tek seferde birden fazla uzantı ekleyebilirsiniz. Yalnızca bir uzantı uyguluyor olsanız bile extensions
özelliğinin bir dizi olması gerektiğini unutmayın.
{
//...,
"extensions": ["parent_tooltip_extension", "break_warning_extension"],
}
Karışım sınıfları
Blockly, bir bloğa bazı özellikler/yardımcı işlevler eklemek ancak bunları hemen çalıştırmak istemediğiniz durumlar için de kullanışlı bir yöntem sunar. Bu, tüm ek özelliklerinizi/yöntemlerinizi içeren bir mixin nesnesi kaydetmenize olanak tanır. Karışım nesnesi daha sonra, belirli bir blok türünün örneği oluşturulduğunda karışımı uygulayan bir işleve sarmalanır.
Blockly.Extensions.registerMixin('my_mixin', {
someProperty: 'a cool value',
someMethod: function() {
// Do something cool!
}
))`
Karışımlarla ilişkili dize anahtarlarına, diğer tüm uzantılarda olduğu gibi JSON'da da referans verilebilir.
{
//...,
"extensions": ["my_mixin"],
}