块状:如何获取下拉菜单或复选框块的值

时间:2018-09-17 15:55:32

标签: blockly google-blockly

我是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");

现在从值输入中获取值不是问题,您可以像这样获得thouse:

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 :(得分:3)

您应该可以跳过中间人并使用element.getFieldValue。例如,要从名为“隐藏”的复选框字段中获取值,可以使用element.getFieldValue("hidden")

P.S。您也可以跳过element.getInputTargetBlock中间人并使用Blockly.JavaScript.valueToCode(即,要在“功能名称”输入中获取块的值,可以使用Blockly.JavaScript.valueToCode(element, "featureName", Blockly.JavaScript.ORDER_ATOMIC)或您拥有的东西)。如果您使用的生成器与JavaScript不同,请用您使用的生成器(例如Python或其他)替换JavaScript