Поле переменной хранит строку в качестве значения и строку в качестве текста. Значение представляет собой идентификатор переменной, а текст — имя переменной.
Переменное поле
Поле переменной с открытым редактором
Переменное поле в свернутом блоке
Создание
Нетипизированный
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;
}