Blockly Как создать переменную в рабочей области (переменная разработчика)

Я хочу создать переменную разработчика для рабочей области в Blockly, но не могу найти нужную функцию/метод.

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

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

var variables = workspace.getAllVariables();
var dev_var = Blockly.Variables.allDeveloperVariables(workspace);

Но какова функция настройки?


person webgl    schedule 06.03.2018    source источник


Ответы (2)


Переменные разработчика — это переменные, которые никогда не будут видны пользователю, но будут существовать в сгенерированном коде. Если это то, что вы ищете: для этого нет API, но вот некоторые вещи, которые вы можете сделать.

  • Если вы хотите зарезервировать имя, чтобы пользователи не могли случайно переопределить вашу переменную, вызовите yourGenerator.addReservedWords('var1,var2,...'). Вы можете инициализировать переменную в коде оболочки.
  • Если вы действительно хотите, чтобы Blockly зарезервировал и объявил переменную для вас, вы можете переопределить функцию init в своем генераторе.

С другой стороны, если вам нужна видимая пользователю переменная, которая всегда отображается на панели инструментов, а пользователь не создает ее, вам следует вызвать yourWorkspace.createVariable('variable_name').

person fennel    schedule 15.03.2018

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

Blockly.Blocks['unittest_fail'] = {
  // Always assert an error.
  init: function() {
    this.setColour(65);
    this.setPreviousStatement(true);
    this.setNextStatement(true);
    this.appendDummyInput()
        .appendField(new Blockly.FieldTextInput('test name'), 'MESSAGE')
        .appendField('fail');
    this.setTooltip('Records an error.');
  },
  getDeveloperVars: function() {
    return ['unittestResults'];
  }
};

ССЫЛКА: https://github.com/google/blockly/issues/1535

person Manish Kumar    schedule 06.01.2021