Unbound 2.0 (документация)
Дата: 29.04.2019 15:41:41
MatroseFuchs: Event Событие - объект который генерируется и рассылается по
какому-либо действию пользователя (например клик мыши, нажатие
клавиши и т.п.). Для распространения события используется
метод dispatch. События объявляются в scope. (event
valChanged) (event evKilled) ... (dispatch evKilled args={}
dir="EventDirection.DOWN" (event
$datahub.getEntity(entityId).health.evKilled)) dir задаёт
направление события по иерархии. По умолчанию dispatch отсылает
событие только в рамках самого элемента. Чтобы отправить событие в
родителя - нужно в dir указать EventDirection.UP. В ребёнка -
EventDirection.DOWN. В сиблингов - достаточно просто объявить эвент
в нужном сиблигне, а dir можно не указывать.
Для dir в hud_replaces заведён dict со значениями. По
умолчанию dir=0. (def constant EventDirection { NONE: 0, UP: 1,
DOWN: 2 }) События в unbound могут генерироваться: Из core
C++ части. Например в блоке slider генерируется
event valueChanged когда изменяется его value. (dispatch
valChanged on='valueChanged' dir=1) Из Scaleform части.
Например событие клика по display object'у (block (style (width =
100) (height = 100) (backgroundColor = 0xff00ff00) ) (bind alpha
"0.5" init=false on='click') ) Различия использования подписки на
события с помощью on и event
Биндинг-конструкции могут подписываться на события двумя
способами: Передача имени события в аргумент on. (bind
eventArgs "$event" init=false on='eventScope') Передача вложенного
объекта event (trace "$event" init=false (event "eventScope"))
Событие может быть сгенерировано: в scalefom, например событие
мыши click или событие клавиатуры keyDown в core c++
части unbound, например блок slider генерирует
событие sliderPositionChanged когда изменятся положение
ползунка в верстке, т.е. событие объявлено в scope элемента и
генерируется в его определении. (def element TestView() layout
= true entrance=true (scope (event eventScope) ) (element Button
(dispatch eventScope on='click') ) ) Но по сути своей это не
генерация события, а превращение из события scalefom/core c++ (в
данном примере 'click') в событие скоупа (в данном
пример eventScope) Рассмотрим различия между этими двумя
способами. Если событие генерируется в scaleform или в
core c++ unbound, то подписаться можно только с использованием
аргумента on. Скрытый текст (def element TestView()
layout = true entrance=true (scope (event eventScope) ) (block
(style (width = 100px) (height = 100px) (backgroundColor =
0xffff0000) ) (bind alpha "0.5" init=false on='click') ) (video
original_widht=1920 original_height=1080 (style (width = 320px)
(height = 180px) ) (source = "R.videos.Logo_All" ) (trace "$event"
init=false on='metaDataChanged') ) ) Если событие
объявлено в scop'e элемента, то существует 2 случая подписки в
зависимости от расположения подписки. Подписку в scope можно
осуществлять и через on и через event Скрытый текст
(def element TestView() layout = true entrance=true (scope (event
eventScope) (var eventArgs:dict = null) (bind eventArgs "$event"
init=false (event "eventScope")) # (bind eventArgs "$event"
init=false on='eventScope') ) (element Button (scope (label =
'dispatch scope event') ) (dispatch eventScope on='click') ) (trace
"eventArgs" init=false) ) Подписку вне скоупа можно
осуществлять только через event Скрытый текст (def
element TestView() layout = true entrance=true (scope (event
eventScope) ) (element Button (scope (label = 'dispatch scope
event') ) (dispatch eventScope on='click') ) (trace "$event"
init=false (event "eventScope")) ) Таким образом
подписываться через аргумент on можно на те события
которые генерирует target-объект. Отдельно рассмотрим
случай подписки на события scop'а при создании элемента. (element
Button (scope (label = 'default text') (bind label 'leftClick'
init=false on='evBtnLeftClickEvent') (bind label 'rightClick'
init=false on='evBtnRightClickEvent') ) )
События 'evBtnLeftClickEvent' и 'evBtnRightClickEvent'
генерируются в определении element'а Button. Если использовать
конструкцию event, то события должны быть объявлены
в родительском скоупе Скрытый текст (def element
TestView() layout = true entrance=true (scope (event eventScope) )
(element Button (scope (label = 'default text') (bind label
"'keyCode: ' + $event.keyCode" init=false (event "eventScope")) ) )
(dispatch eventScope on='stageKeyUp') )
Unbound 2.0 (документация)














