Поля

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

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

import {javascriptGenerator} from 'blockly/javascript';

javascriptGenerator.forBlock['my_custom_block'] = function(block, generator) {
  // Get the field value.
  const fieldValue = block.getFieldValue('MY_FIELD');

  // Concatenate the code.
  const code = `some code ${fieldValue} some more code`;

  // Return the code.
  return code;
}

Получить значения

Доступ к значениям полей можно получить с помощью getFieldValue . То, что возвращается, отличается от поля к полю, поэтому вам следует проверить документацию по встроенному полю для получения информации о вашем конкретном поле. Например, поля ввода текста возвращают точный текст, введенный пользователем, а поля раскрывающихся списков возвращают независимую от языка строку, связанную с элементом, выбранным пользователем.

Преобразование значений

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

Струны

Строки должны быть заключены в кавычки генератором кода, прежде чем их можно будет объединить.

// For a single line text field.
const str = generator.quote_(block.getFieldValue('STR'));

// For a multiline text field.
const str = generator.multiline_quote_(block.getFieldValue('STR'));

Переменные

Имена переменных должны быть очищены генератором кода, прежде чем их можно будет объединить. Это необходимо по двум причинам:

  1. Переменные вводятся пользователем на выбранном им языке. Это означает, что их, возможно, потребуется преобразовать в символы ASCII. Например, " متغير " будет преобразовано в " _D9_85_D8_AA_D8_BA_D9_8A_D8_B1 ".
  2. Переменные могут конфликтовать с зарезервированными словами. Это означает, что их, возможно, придется изменить, чтобы они не конфликтовали. Например, « for » будет преобразовано в « for2 ».
const identifier = generator.getVariableName(block.getFieldValue('VAR'));

Объединенный код

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

const code = `some code ${value} some more code`;

Код возврата

Разные типы блоков требуют, чтобы строка кода возвращалась разными способами, поэтому посетите их отдельные страницы для получения дополнительной информации: