Как сделать блок в Blockly? - PullRequest
0 голосов
/ 21 мая 2019

Я просмотрел документацию Workspace и попытался использовать метод newBlock следующим образом:

var block = workspace.newBlock("string_length"), чтобы добавить пользовательский блок, который определяется следующим образом:

Blockly.Blocks['string_length'] = {
  init: function() {
    this.jsonInit({
      "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"
    });
  }
};

Blockly имеет тенденцию генерировать исключение, когда имя прототипа блока не распознается, но, кажется, распознает его и назначает свой уникальный идентификатор и другую информацию.

Блок оказался невидимым даже после попыткидобавьте его в топблоки.

1 Ответ

0 голосов
/ 21 мая 2019

При добавлении блоков вручную необходимо выполнить определенный процесс.

Убедитесь, что блок был добавлен правильно, то есть block = workspace.newBlock("your_type") не вызывает ошибку и блок инициализируется.

Далее вам нужно вызвать функцию block.initSvg(), в документации сказано, что вам нужно вызвать либо функцию initSvg(), либо initModel():

Вызовите initModel для всех полей в блоке,Может быть вызван более одного раза.Либо initModel, либо initSvg должны вызываться после создания блока и до первого взаимодействия с ним.К взаимодействиям относятся действия пользовательского интерфейса (например, нажатие и перетаскивание) и события запуска (например, создание, удаление и изменение).

Но функция initModel(), похоже, выдает мне ту же ошибку, что и когда я неИнициализировав его, документация, насколько я вижу, также не дает четкого различия между ними.

После вызова функции initSvg() вы сможете отобразить нужный блок, вызвав .render()в вашем рабочем пространстве объект.

источники:

Блочная документация

Документация рабочего пространства

...