Реклама | Adv
  • Rotator
  • Rotator
  • Rotator
  • Rotator
  • Rotator
  • Rotator
  • Rotator
  • Rotator
  • Rotator
  • Rotator
  • Rotator
  • Rotator
  • Rotator
  • Rotator
Сообщения форума
Реклама | Adv

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') )      

Реклама | Adv