Blockly: как получить значение Dropdown или Checkbox Block

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

Давайте рассмотрим следующий сценарий (созданный с помощью blockly-dev-tools):

  Blockly.Blocks['feature'] = {
init: function () {
  this.appendDummyInput()
    .appendField("Feature") // just for label
    .appendField(new Blockly.FieldDropdown([["manufacturer", "feature_manufacturer"], ["profile", "feature_profile"], ["glas", "feature_glas"]]), "category"); // for dropdown values
  this.appendValueInput("feature_name")
    .setCheck("String")
    .setAlign(Blockly.ALIGN_RIGHT)
    .appendField("Name");
  this.appendValueInput("feature_prio")
    .setCheck("Number")
    .setAlign(Blockly.ALIGN_RIGHT)
    .appendField("Priorität");
  this.appendDummyInput()
    .setAlign(Blockly.ALIGN_RIGHT)
    .appendField("Versteckt")
    .appendField(new Blockly.FieldCheckbox("TRUE"), "hidden");

Теперь получение значений из входных значений не является проблемой, вы можете получить вот так:

const featureName = element.getInputTargetBlock("feature_name");
      if (featureName) {
        console.log(featureName.getFieldValue("TEXT"));
      }
const featurePrio = element.getInputTargetBlock("feature_prio");
      if (featurePrio) {
        console.log(featurePrio.getFieldValue("NUM"));
      }

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

1 ответ

Решение

Вы должны быть в состоянии пропустить посредника и использовать element.getFieldValue, Например, чтобы получить значение из поля флажка с именем "скрытый", вы можете использовать element.getFieldValue("hidden"),

PS Вы также можете пропустить element.getInputTargetBlock посредник и использование Blockly.JavaScript.valueToCode (IE, чтобы получить значение блока на входе "feature_name", вы можете использовать Blockly.JavaScript.valueToCode(element, "featureName", Blockly.JavaScript.ORDER_ATOMIC) или что там у тебя). Если вы используете генератор, отличный от JavaScript, замените JavaScript с генератором, который вы используете (например, Python или любой другой).

Другие вопросы по тегам