Blockly: Как получить значение Dropdown или Checkbox Block - PullRequest
0 голосов
/ 17 сентября 2018

Я новичок в 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 Ответ

0 голосов
/ 18 сентября 2018

Вы должны быть в состоянии пропустить посредника и использовать 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 или любой другой).

...