Контролы особенно ценны для работы с событиями, поскольку позволяют взаимодействовать с пользователями. Они используются как отдельно, так и в связке с тулбаром, формой и другими компонентами. Все контролы, связанные с пользовательским интерфейсом, унаследованы от input.
Button, Checkbox, ColorPicker, Combo, Counter, DatePicker, DateRangePicker, DoubleList,
Fieldset, FormInput,
Icon, Label, Multicombo, Multiselect, Multitext, Radio, RangeSlider,
RichSelect, RichText, Search,
Select, Segmented Button, Slider, Suggest List и его продвинутые варианты, Switch Button, Tabbar, Text, Textarea, Toggle Button.
У контролов есть как общие, так и индивидуальные особенности.
Конструктор контрола содержит его название и свойства, которые отвечают за его внешний вид и поведение.
Некоторые свойства дублируют названия HTML атрибутов, а некоторые существуют только в библиотеке Webix. Вы также можете установить необходимые HTML атрибуты через объект свойства attributes нужного контрола:
{ view:"text", width:200, attributes:{ maxlength:10 }, click:function(){ ... }}
Свойство label определяет название контрола. Сам Лейбл размещен возле него.
Не путайте свойство label с компонентом label.
Related sample: Positioning Labels
Можно заблокировать любой контрол или отключить его редактирование с помощью специальных свойств disable и readonly:
elements:[
{ view:"text", readonly:true },
{ view:"datepicker", disabled:true }
]
Свойство align позволяет задать горизонтальное положение контрола и его лейбла по отношению к родительскому контейнеру (например form):
Related sample: Aligning Inputs and Labels
При каждой инициализации, для контрола резервируется необходимое пространство. Оно либо соответствует размеру родителя (форма, тулбар), либо определяется свойством width самого контрола.
Если несколько контролов находятся в одной строке/столбце, доступное пространство распределяется поровну между ними.
Итоговая ширина контрола определяется свойствами inputWidth и labelWidth (см. изображение).
Не указывайте значение inputWidth или labelWidth больше, чем значение width. В противном случае, часть контрола будет скрыта.
В то же время, вы можете увеличить ширину контрола. В этом случае, между лейблом и контролом появится свободное пространство.
Существуют 3 группы свойств для управления размерами:
// text2 в 3 раза больше чем text1
rows:[
{ view:"text", name:"text1", gravity:1 },
{ view:"text", name:"text2", gravity:3 }
]
Контролы могут вызывать функции-обработчики для любого компонента приложения. Ознакомьтесь с разделом Обработка событий для лучшего понимания этой темы.
Внутри контрола есть собственные события:
Есть 2 способа, чтобы добавить событие:
Для этого предусмотрено свойство click, которое эквивалентно событию "onItemClick".
{ view:"button", click:function(){
$$("my_form").validate();
}}
Свойство on позволяет добавить обработчики для несколько событий, которые доступны для контрола:
//клик по кнопке
{ view:"button", on:{
onItemClick:function(){...}
}}
//изменение состояния
{ view:"text", on:{
onChange:function(){...}
}}
//клик по кнопке
$$("my_button").attachEvent("onItemClick", function(){...});
//изменение состояния
$$("my_text").attachEvent("onChange", function(){...});
Реализация обработчика onChange() описана в документации компонента Form.
У каждого поля формы может быть связанное поле. Привязать его можно с помощью свойства relatedView.
Такое поле может реагировать на изменения в мастере и менять свое состояние:
Такое поведение определяется полем мастера с помощью свойства relatedAction:
Активация поля формы через изменения в другом поле
elements:[
{ view:"text", id:"master", relatedView:"slave", relatedAction:"enable" },
{ view:"text", id:"slave", disabled:true }
]
Должны соблюдаться следующие условия:
Related sample: Automatic Form Reconfiguration
Контролы с одним значением
Для таких контролов как text и textarea, свойство value зачастую не устанавливается заранее. Они ожидают ввода данных пользователем.
Есть несколько способов для работы со свойством value:
Контролы с несколькими значениями
Такие контролы можно разделить на 2 группы:
Значения опций этих контролов можно задать через свойство options в виде массива или коллекции объектов.
Массив опций для компонента Combo
{ view:"combo", id:"field_m", label: "Combo", value:"One", yCount:"3",
options:["One", "Two", "Three"]
}
Значение по умолчанию можно задать через свойство value. Оно должно соответствовать одному из предопределенных значений.
Коллекция объектов
{
view:"radio", label:"Branch", value:1, options:[
{ value:"Master", id:1 },
{ value:"Branch", id:2 }
]
}
Серверные данные для контролов с несколькими значениями
Такие контролы как select, combo, multicombo, richselect и multiselect могут получать данные из сервера. Свойство options позволяет указать путь к скрипту, по которому будут загружаться данные.
{ view:"combo", options:"server/data.json"}
Related sample: Advanced Options for Select Controls ("combo" and "richselect")
Помните, что метод getValue() будет возвращать только id выбранного элемента (вкладки/сегмента/опции).
Значения контролов можно устанавливать и после инициализации. Для этого предусмотрены такие методы как setValue(), который устанавливает значение для одного контрола, и setValues() который может устанавливать значения для всех контролов внутри формы. С последним методом можно ознакомиться в этой статье.
Оба этих метода принимают нужное значение (или объект со значениями) в качестве параметра и вызываются для необходимого контрола или формы:
$$("text1").setValue("Anna"); //устанавливает значение для контрола text c ID "text1"
$$("form1").setValues({ //устанавливает значения для нескольких полей формы
text1:"Anna",
text2:"Brown"
});
Значения для контролов с двумя состояниями (таких как checkbox и radio) можно установить несколькими способами:
//активирует контрол, если он отключен и наоборот
$$("mycheckbox").toggle();
В библиотеке есть 2 метода, с помощью которых можно получить значения компонентов:
Если вам нужно получить значение отдельного контрола, используйте метод getValue:
{ view:"select", id:"my_sel", value:1, options:[
{ id:1, value:"Master" },
{ id:2, value:"Release" }
]}
var value = $$("my_sel").getValue(); // возвращает 1
Если вам нужно получить значения всех контролов, которые включены в форму, используйте метод getValues(). У таких контролов должно быть либо свойство name, либо ID.
webix.ui({
view:"form", elements:[
{ view:"text", id:"title", value:"" },
//другие контролы
]
});
var title = $$("myform").getValues().title, // возвращает значение текстового поля
Значения контрола могут быть разными:
Если метод getValue() возвращает объект (например объект date), а вы хотите получить строку, можно включить свойство stringResult в конструктор контрола:
webix.ui({
view:"datepicker",
stringResult:true, // false по умолчанию
// другие свойства
});
Вы можете добавить специальную иконку в поле контрола для удаления значений. Она доступна для следующих контролов:
Чтобы добавить такую возможность, установите свойству clear значение true:
webix.ui({
width:400,
rows:[
{ view:"search", label:"Search", clear:"hover" },
{ view:"text", label:"Text", clear:true },
{ view:"combo", label:"Combo", options: list_data, clear:"replace" }
]
});
Related sample: Controls: Clear Value
По желанию, контролы можно скрывать и отображать:
Для скрытых полей формы библиотека предлагает воспользоваться специальными методами. Они фактически устраняют необходимость создавать скрытые поля. Вы можете управлять только их значениями.
Вы можете задать произвольные стили для любого контрола. Детальнее об этом можно узнать в этой статье.
Для всех контролов можно задать специальную подсказку. Для детального ознакомления перейдите в раздел Работа с Tooltip.
Если у вас есть несколько одинаковых контролов внутри формы или тулбара (несколько текстовых полей в форме или кнопок в тулбаре) и вы хотите установить для них одинаковые свойства, определите их в объекте свойства elementsConfig у компонента.
Детали можно узнать в этой статье нашей документации.
Наверх