Переменные поля

В поле переменной хранится строка в качестве значения и строка в качестве текста. Значение представляет собой идентификатор переменной, а текст — имя переменной.

Поле переменной

Блок с меткой "переменная:" и выпадающее поле с выбранным значением "x".

Поле переменной с открытым редактором

Тот же блок с открытым выпадающим списком. В меню есть пункты "x", "Переименовать переменную..." и "Удалить переменную "x"".

Переменное поле в свернутом блоке

Тот же блок после сворачивания. Он имеет метку "variable: x" и зубчатый правый край, указывающий на то, что он свернут.

Творение

Ненапечатанный

JSON

{
  "type": "example_variable_untyped",
  "message0": "variable: %1",
  "args0": [
    {
      "type": "field_variable",
      "name": "FIELDNAME",
      "variable": "x"
    }
  ]
}

JavaScript

Blockly.Blocks['example_variable_untyped'] = {
  init: function() {
    this.appendDummyInput()
        .appendField('variable:')
        .appendField(new Blockly.FieldVariable('x'), 'FIELDNAME');
  }
};

Напечатано

JSON

{
  "type": "example_variable_typed",
  "message0": "variable: %1",
  "args0": [
    {
      "type": "field_variable",
      "name": "FIELDNAME",
      "variable": "x",
      "variableTypes": ["Number", "String"],
      "defaultType": "Number"
    }
  ]
}

JavaScript

Blockly.Blocks['example_variable_typed'] = {
  init: function() {
    this.appendDummyInput()
      .appendField('variable:')
      .appendField(new Blockly.FieldVariable(
          'X',
          null,
          ['Number', 'String'],
          'Number'
      ), 'FIELDNAME');
  }
};

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

  • Имя переменной должно быть строкой. Это будет имя исходной переменной, которую будет содержать поле. Если оно равно null или undefined, будет сгенерировано уникальное имя.
  • Типы переменных должны представлять собой массив строк. Это указывает полю, какие типы переменных оно может содержать (т.е. какие типы переменных добавлять в выпадающий список). Если значение равно null или undefined, будут приняты все типы переменных (и добавлены в выпадающий список).
  • Тип по умолчанию должен быть строкой. Он будет использоваться при создании начальной модели переменной поля. Если он определен, его следует включить в массив типов переменных. Если он равен null или не определен, это значение по умолчанию принимает значение пустой строки, что означает, что начальная переменная будет иметь гибкий тип.

→ Дополнительную информацию о строгой типизации см. в разделе «Проверка типов» .

Сериализация

JSON

JSON-объект для поля переменной выглядит следующим образом:

{
  "fields": {
    "FIELDNAME": {
      "id": "QJD^+@[RVIwbLSZoDb:V"
    }
  }
}

Где FIELDNAME — это строка, ссылающаяся на поле переменной, а значением является идентификатор переменной, на которую ссылается это поле.

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

{
  "fields": {
    "FIELDNAME": {
      "name": "my_variable",
      "type": "string"
    }
  }
}

XML

XML-код для поля переменной выглядит следующим образом:

<field name="VARIABLE" id="QJD^+@[RVIwbLSZoDb:V" variabletype="">name</field>
  • Атрибут name узла содержит строку, ссылающуюся на поле переменной.
  • Атрибут ` id узла содержит идентификатор переменной, на которую ссылается поле.
  • Атрибут variabletype узла содержит тип переменной. Тип variabletype определяется по тем же правилам, что и параметр типа по умолчанию конструктора.
  • Внутренний текст узла — это имя переменной. Значение внутреннего текста подчиняется тем же правилам, что и параметр имени переменной в конструкторе.

Создание валидатора переменных

Значение поля переменной представляет собой строку, поэтому любые валидаторы должны принимать строку и возвращать строку, null или undefined .

Вот пример валидатора, который принимает в качестве параметров только некоторые предопределенные переменные. Эти переменные необходимо определить с помощью функции Workspace.getVariableMap().createVariable при загрузке рабочей области.

function(newValue) {
  var validIds = ['Worf', 'Riker', 'Picard'];
  if (validIds.indexOf(newValue) == -1) {
    return null;
  }
  return newValue;
}

Анимированный GIF-файл, демонстрирующий работу функции проверки. При выборе «Пикар» или «Райкер» из выпадающего списка, выпадающий список отображает этот вариант. При выборе «x» из выпадающего списка, выпадающий список отображает предыдущий вариант, то есть «Райкер».