События

Каждое изменение в рабочей области вызывает событие. Эти события полностью описывают состояние до и после каждого изменения.

Прослушивание событий

В рабочих областях есть методы addChangeListener и removeChangeListener , которые можно использовать для прослушивания потока событий. Одним из примеров является генерация кода в реальном времени . Другой пример — демо-версия максимального лимита блоков . Как это часто бывает, ни один из этих двух примеров не заботится о том, какое событие стало триггером. Они просто смотрят на текущее состояние рабочего пространства.

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

function onFirstComment(event) {
  if (event.type == Blockly.Events.BLOCK_CHANGE &&
      event.element == 'comment' &&
      !event.oldValue && event.newValue) {
    alert('Congratulations on creating your first comment!')
    workspace.removeChangeListener(onFirstComment);
  }
}
workspace.addChangeListener(onFirstComment);

Чтобы прослушивать любые события, происходящие внутри всплывающего окна, в рабочую область всплывающего окна можно добавить прослушиватель.

var flyoutWorkspace = yourWorkspace.getFlyout().getWorkspace();
flyoutWorkspace.addChangeListener(onFirstComment);

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

Типы событий

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

Демо

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