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

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

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

Творение
Ненапечатанный
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;
}
