Просмотр полной версии : как изменить currentState application ИЗ компонента?
решил навести порядок в программе, как рекомендуют, разделил всё на компоненты. очень даже не плохо. но возникли проблемы... я создал компонент - кнопку, нажав на которую я хочу изменить currentState программы (не компонента) на другой. но флекс думает что я хочу изменить стейт компонента, и не найдя его выдаёт ошибку соответственно.
так как же изменить стейт главного приложения из компонента?
События до упора , а там ловите и меняйте.
Волгоградец
29.07.2010, 17:29
Передать событие в родительский объект. Была тема вчера.
пытался разобраться, но не получилось :( я только начинаю работать с флексом, по этому есть куча вещей которых я ещё не знаю...
кнопка находиться в панели, панель находиться в компоненте group, далее компонент вставляется в application (главное приложение), далее
<s:Button label="жми" click="setCurrentState('main')"/>
Читайте тогда про события, баблинг и все такое.
почитал. что такое события и что такое баблинг я понял. но не вижу как мне это поможет..?
private function setNewState(event:Event):void
{
trace(event.currentTarget);
}
даёт мне длииииинный список. что с ним делать?
ap.AppSkin2._AppSkin_Group1.Group4.contentGroup._ap_LoginForm1.Panel8.PanelSkin9._PanelSkin_Group1.contents.contentGroup.Button21
Dimitry_II
29.07.2010, 19:02
Всплытие события позволит подниматься ему по иерархии родителей пока он не натолкнется на обработчик этого события. Ставишт обработчик там, где тебе надо стейт поменять, ловишь событие и меняешь.
не расскажешь по подробнее..? что-то я всё пробую понять какой ивент и на кого его ставить? и кто должен слушать его?
Аппликейшен ждет события клика по кнопке от group, вероятно, и меняет себе стейт.
parentApplication.currentState="нужный стейт"
Dimitry_II
30.07.2010, 17:13
Что-то тема разрослась и стала путаться. Давай сделаем "по классике", а ты себе уже изменишь что хочешь ...
В компоненте определяешь событие:
<fx:Metadata>
[Event(name="myEvent", type="flash.events.Event")]
</fx:Metadata>
Для отсылки используем диспетчер:
<s:Button label="жми" click="dispatchEvent(new Event('myEvent'))"/>
А в родительском классе/окне/компоненте при определении текущего компонента:
<xxx:Component ... myEvent="myEventHandler(event)">
и обработчик:
private function myEventHandler(event:Event):void {
...
}
Это механизм передачи стандартного события из пакета flash.event. Если надо организовать что-то свое (кастомный эвент), то создаешь класс, расширяющий эвент, с нужными параметрами/механизмом и передаешь его. Но все в принципе схоже.
Ivanaka спасибо :) проще некуда. а главное работает. но я уже по другому сделал всё, в принципе как сказал Dimitry_II :) пришлось покопаться в исходниках разных
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.