Поле флажка хранит строку в качестве значения и строку в качестве текста. Его значение — 'TRUE'
или 'FALSE'
, а его текст — 'true'
или 'false'
.
Поле флажка
Поле флажка в свернутом блоке
Создание
JSON
{
"type": "example_checkbox",
"message0": "checkbox: %1",
"args0": [
{
"type": "field_checkbox",
"name": "FIELDNAME",
"checked": true
}
]
}
JavaScript
Blockly.Blocks['example_checkbox'] = {
init: function() {
this.appendDummyInput()
.appendField('checkbox:')
.appendField(new Blockly.FieldCheckbox(true), 'FIELDNAME');
}
};
Конструктор флажка принимает необязательное значение и необязательный валидатор . Необязательное значение должно быть либо 'TRUE'
, 'FALSE'
, либо логическим, иначе по умолчанию будет false
.
Сериализация
JSON
JSON для поля флажка выглядит так:
{
"fields": {
"FIELDNAME": true
}
}
Где FIELDNAME
— это строка, ссылающаяся на поле флажка, а значение — это значение, которое следует применить к полю. Значение должно быть логическим.
XML
XML для поля флажка выглядит так:
<field name="FIELDNAME">TRUE</field>
или
<field name="FIELDNAME">true</field>
Где атрибут name
содержит строку, ссылающуюся на поле флажка, а внутренний текст — это значение, которое следует применить к полю. Внутреннее текстовое значение подчиняется тем же правилам, что и значение конструктора.
Обратите внимание, что после десериализации и повторной сериализации все внутренние текстовые значения будут записаны заглавными буквами ( 'TRUE'
или 'FALSE'
). Иногда это важно при изменении рабочих пространств.
Кастомизация
Символ галочки
Свойство Blockly.FieldCheckbox.CHECK_CHAR
можно использовать для изменения внешнего вида галочки. Значение должно быть строкой, содержащей символ Юникода.
Свойство CHECK_CHAR
по умолчанию имеет значение «\u2713» или ✓.
Это глобальное свойство, поэтому при его установке будут изменяться все поля флажков.
Создание валидатора флажков
Значением поля флажка является либо 'TRUE'
, либо 'FALSE'
, поэтому валидатор должен принять эти значения (т. е. строку) и вернуть 'TRUE'
, 'FALSE'
, null
или undefined
.
Вот пример валидатора, который скрывает или показывает поле ввода текста в зависимости от того, установлен ли флажок:
validate: function(newValue) {
var sourceBlock = this.getSourceBlock();
sourceBlock.showTextField_ = newValue == 'TRUE';
sourceBlock.updateTextField();
return newValue;
},
updateTextField: function() {
var input = this.getInput('DUMMY');
if (this.showTextField_ && !this.getField('TEXT')) {
input.appendField(new Blockly.FieldTextInput(), 'TEXT');
} else if (!this.showTextField_ && this.getField('TEXT')) {
input.removeField('TEXT');
}
}