Blockly> workspaceToCode показывает только последний блок - PullRequest
0 голосов
/ 01 апреля 2020

Я разрабатываю пользовательские блоки для решения по автоматизации. Я создал блок «switch», а также блок «set». Функция, которую я хочу достичь, это «установить xx_name_switch в true», в основном включать и выключать свет.

Когда я запускаю workspaceToCode на коммутаторе и блоке логики c, я получаю правильный вывод> ({"ma c": "D8: F1: 5B: D7: 69: A7", "state") : "1"}) == true;

switch block included with = logic

Но теперь, когда я добавляю блок "set", я получаю только "SET" в качестве вывод кода !! где я ожидал>

"SET ({" ma c ":" D8: F1: 5B: D7: 69: A7 "," state ":" 1 "}) == true;"

enter image description here
Любая подсказка, что я делаю не так? вот код для пользовательских блоков

    Blockly.Blocks['devices_4g_switch'] = {
  init: function() {

    // array definition for dynamic.
    this.savedExpressionArray = [];

    this.appendDummyInput()
        .setAlign(Blockly.ALIGN_CENTRE)
        .appendField("switch name")
        // we have to add the binding so that "this" refers to the correct object.
        .appendField(new Blockly.FieldDropdown(this.devicesList.bind(this)), 'NAME');

    this.appendDummyInput()
        .setAlign(Blockly.ALIGN_RIGHT)
        .appendField(new Blockly.FieldDropdown([["Switch 1","1"], ["Switch 2","2"], ["Switch 3","3"], ["Switch 4","4"], ["Switch all","0"]]), "switchs");
    this.setInputsInline(true);
    this.setOutput(true, null);
    this.setColour(230);
 this.setTooltip("4gang wireless switch");
 this.setHelpUrl("");
  },

    devicesList: function() {
        // gather devices list
        var deviceList = [];
        $('#devices-grid div.device-card').each(function(i) {
            var dData = JSON.parse($(this).attr('data-settings'));
            deviceList.push([dData.name, dData.mac]);
        });     

        // These things changed to call this.savedExpressionArray.
        for (var i = 0; i <  this.savedExpressionArray.length; i++) {
            deviceList.push( this.savedExpressionArray[i], 'OPTION' + i);
        }
        return deviceList;
  }    
};

Blockly.JavaScript['devices_4g_switch'] = function(block) {
  var dropdown_name = block.getFieldValue('NAME');
  var dropdown_switchs = block.getFieldValue('switchs');
  var value_name = Blockly.JavaScript.valueToCode(block, 'NAME', Blockly.JavaScript.ORDER_ATOMIC);

  // TODO: Assemble JavaScript into code variable.
  var code = JSON.stringify({mac:dropdown_name, state:dropdown_switchs});
  // TODO: Change ORDER_NONE to the correct strength.
  return [code, Blockly.JavaScript.ORDER_NONE];
};

Blockly.Blocks['logic_set'] = {
  init: function() {
    this.appendValueInput("SET")
        .setCheck("Boolean")
        .appendField("Set");
    this.setInputsInline(true);
    this.setColour(230);
 this.setTooltip("");
 this.setHelpUrl("");
  }
};

Blockly.JavaScript['logic_set'] = function(block) {
  var value_set = Blockly.JavaScript.valueToCode(block, 'SET', Blockly.JavaScript.ORDER_ATOMIC);
  // TODO: Assemble JavaScript into code variable.
  var code = 'SET';
  return code;
};
...