Поля являются важной частью генерации кода, поскольку они определяют редактируемые пользователем значения, такие как строки, числа и цвета (среди прочего).
Включение значений полей в сгенерированный код включает получение значения поля, преобразование его в пригодную для использования строку и последующее объединение строки с остальной частью кода.
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'));
Переменные
Имена переменных должны быть очищены генератором кода, прежде чем их можно будет объединить. Это необходимо по двум причинам:
- Переменные вводятся пользователем на выбранном им языке. Это означает, что их, возможно, потребуется преобразовать в символы ASCII. Например, "
متغير
" будет преобразовано в "_D9_85_D8_AA_D8_BA_D9_8A_D8_B1
". - Переменные могут конфликтовать с зарезервированными словами. Это означает, что их, возможно, придется изменить, чтобы они не конфликтовали. Например, «
for
» будет преобразовано в «for2
».
const identifier = generator.getVariableName(block.getFieldValue('VAR'));
Объединенный код
Получив значение поля и преобразовав его в строку, вы можете объединить его в нужном месте со строкой кода.
const code = `some code ${value} some more code`;
Код возврата
Разные типы блоков требуют, чтобы строка кода возвращалась разными способами, поэтому посетите их отдельные страницы для получения дополнительной информации: