События
Событие или цепочка событий инициатором которого является данный компонент.
Пример реализации события
<smart
name="button"
id="test_button"
events='{"click":{"0":{"test_button":{"action":"push"}}}}'
sf-code="button"
data='{"text":"Клик"}'
property='{"size":"small"}'>
</smart>
{ Тип события: { 0: { Идентификатор элемента: { action: 'push' } },1: { Аякс_запрос: { action: 'send',async: 'true',method: 'get',url:'/url?get' }}}
Тип события
- На данный момент представлены стандартные обработчики типа:click,keydown,input
.
Так же существует событие ready, выполняемое после инициализации компонента и его дочерних компонентов (если имеются).Идентификатор элемента
- Может содержать в себе как id элемента, так и класс. В случае класса идет выборка всех элементов в текущем шаблоне компонента.
Если по данному селектору ничего не найдено, то суперкласс пытается найти компонент с данным идентификатором и происходит поискaction
непосредственно в нем.action
- Свойство отвечающее за метод, который будет выполнен.async
- Вызывается ли асинхронный метод ?True/False
Не обязательное свойствоmethod
- Тип запросаurl
- Урл запроса
Пример events.js из ядра смарт-компонента
const push = (props) => {
alert('Клик по кнопке')
}
export { push }
Реализация events.js из ядра компонента отличается от файла находящегося в шаблоне!
Дополнительная информация при подгрузке шаблона с имеющимся в нем
events.js
Цепочка событий
{ input: { 0: { init_input: { action: 'save' } }, 1: { text_holder: { action: 'write' } } } }
В данном примере происходит поиск события save
у элемента-инициатора, которое сохраняет значение из input. После ищется
компонент с идентификатором text_holder
( в данном случае это простой компонент text
), после чего выполняется action write
(Берется значение из компонента-инициатора props.initiator.value
и обновляем data-аттрибут текущего компонента).
Цепочка событий может быть любой длинны.
const save = (props) => {
const parent = props.parent
parent.value = props.event.target.value
}
const write = (props) => {
props.parent.props.data.text = props.initiator.value
}