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

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

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

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

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

Создание

Нетипизированный

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');
  }
};

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

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

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

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

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.createVariable при загрузке рабочей области.

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