Blockly:如何获取下拉框或复选框块的值
Blockly: How to obtain value of a Dropdown or 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"));
}
但是托管下拉菜单或复选框的虚拟输入没有提供选定值的方法。
这可能是我使用虚拟输入来承载元素的概念错误,但是当使用值输入时,你总是有右边的乳头,这是过时的,因为值是由复选框或下拉列表提供的。
您应该可以跳过中间人并使用 element.getFieldValue
。例如,要从名为 "hidden" 的复选框字段中获取值,您可以使用 element.getFieldValue("hidden")
.
P.S。您还可以跳过 element.getInputTargetBlock
中间人并使用 Blockly.JavaScript.valueToCode
(即,要在 "feature_name" 输入中获取块的值,您可以使用 Blockly.JavaScript.valueToCode(element, "featureName", Blockly.JavaScript.ORDER_ATOMIC)
或者您有什么) .如果您使用与 JavaScript 不同的生成器,请将 JavaScript
替换为您使用的生成器(例如 Python 或其他)。
我是 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"));
}
但是托管下拉菜单或复选框的虚拟输入没有提供选定值的方法。 这可能是我使用虚拟输入来承载元素的概念错误,但是当使用值输入时,你总是有右边的乳头,这是过时的,因为值是由复选框或下拉列表提供的。
您应该可以跳过中间人并使用 element.getFieldValue
。例如,要从名为 "hidden" 的复选框字段中获取值,您可以使用 element.getFieldValue("hidden")
.
P.S。您还可以跳过 element.getInputTargetBlock
中间人并使用 Blockly.JavaScript.valueToCode
(即,要在 "feature_name" 输入中获取块的值,您可以使用 Blockly.JavaScript.valueToCode(element, "featureName", Blockly.JavaScript.ORDER_ATOMIC)
或者您有什么) .如果您使用与 JavaScript 不同的生成器,请将 JavaScript
替换为您使用的生成器(例如 Python 或其他)。