Co to jest definicja bloku?

Definicja bloku to obiekt definiujący blok niestandardowy. Na przykład określa wygląd i wygląd bloku (tekst, pola, połączenia, kolor itp.), a także jego zachowanie (obsługa zdarzeń na poziomie bloku itp.).

Na przykład ten blok:

Blok „string_length”.

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 mikser 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 wywołać zachowanie niestandardowe.

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 klasy Block (lub BlockSvg).

Blockly definiuje niewielką liczbę funkcji, których możesz używać do dostosowywania bloków. Najczęstszym z nich jest init, który jest wywoływany przez Blockly w celu zainicjowania bloku i służy do definiowania wyglądu i działania bloku. Pełną listę znajdziesz w przypadku właściwości o wartościach funkcji w klasach BlockBlockSvg. Te właściwości tworzą interfejs do implementowania definicji bloków. Wszystkie są opcjonalne.

Definicje bloków mogą też zawierać funkcje niestandardowe, ale Blockly nie będzie ich wywoływać bezpośrednio. Zamiast tego można ich używać do implementowania innych funkcji. Na przykład przetwarzacz zdarzeń na poziomie bloku (właściwość Block.onchange) może delegować różne zdarzenia do różnych funkcji niestandardowych.

Jak tworzyć definicje bloków

Definicje bloków można tworzyć na kilka sposobów:

  • Korzystaj z Narzędzi dla programistów Blockly, aby określić wygląd i działanie 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 ją zmodyfikuj. Więcej informacji znajdziesz w sekcji Modyfikowanie istniejących definicji.
  • Ręcznie wpisz definicję bloku. Więcej informacji znajdziesz w artykule JSON i JavaScript.