Definicja bloku to obiekt, który definiuje blok niestandardowy. Określa on na przykład wygląd bloku (tekst, pola, połączenia, kolor itp.) oraz jego działanie (procedura obsługi zdarzeń na poziomie bloku itp.).
Na przykład ten blok:
można zdefiniować w formacie JSON lub JavaScript w ten sposób:
JSON
Blockly.common.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"
}]);
defineBlocksWithJsonArray
tworzy definicję bloku na podstawie obiektu JSON.
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');
}
};
Gdy używasz JavaScriptu, definicję bloku tworzysz bezpośrednio.
Jak działają definicje bloków
Definicja bloku to mixin zawierający właściwości o wartościach funkcji. Gdy tworzony jest nowy blok, te właściwości są kopiowane do nowo utworzonego obiektu bloku. Blockly wywołuje te funkcje, aby uruchomić niestandardowe działanie.
Ponieważ funkcje definicji są mieszane z obiektem bloku:
- Słowo kluczowe
this
w funkcjach definicji odnosi się do obiektu bloku. Oznacza to, że można go używać do uzyskiwania dostępu do publicznych metod i właściwości w klasieBlock
(lubBlockSvg
).
Blockly definiuje niewielką liczbę funkcji, których możesz używać do dostosowywania bloków. Najczęściej używaną z nich jest funkcja init
, która jest wywoływana przez Blockly do inicjowania bloku i służy do określania jego wyglądu. Pełną listę znajdziesz w przypadku właściwości z wartościami funkcji w klasach Block
i BlockSvg
.
Te właściwości stanowią interfejs definicji bloków, który można wdrożyć. Wszystkie są opcjonalne.
Definicje bloków mogą też zawierać funkcje niestandardowe, ale Blockly nie będzie ich wywoływać bezpośrednio. Można ich natomiast używać do implementowania innych funkcji. Na przykład moduł obsługi zdarzeń na poziomie bloku (właściwość Block.onchange
) może delegować różne zdarzenia do różnych funkcji niestandardowych.
Tworzenie definicji bloków
Definicje bloków można tworzyć na kilka sposobów:
- Użyj Narzędzi deweloperskich Blockly, aby określić wygląd bloku. Skopiuj wygenerowany kod JSON lub JavaScript do swojego kodu i w razie potrzeby dodaj kod niestandardowy. Więcej informacji znajdziesz w narzędziach dla programistów Blockly.
- Znajdź podobny blok, skopiuj jego definicję i w razie potrzeby zmodyfikuj ją. Więcej informacji znajdziesz w sekcji Modyfikowanie istniejących definicji.
- Ręcznie wpisz definicję bloku. Więcej informacji znajdziesz w artykule JSON i JavaScript.