2013-03-22 2 views
0

Я чувствую, что доступ к внутренним компонентам может быть лучше, чем то, что я знаю. Я знаю, что мы можем получить доступ к любому внутреннему компоненту что-то вроде: FlexGlobals.topLevelApplication.someChild1.someChild2.someChild3 ... и так далееполучить внутренний компонент из flexGlobals.topLevelApplication

У меня есть компоненты, которые имеют ряд иерархии родительских компонентов. Я хочу знать, может ли быть так или иначе, я мог бы получить доступ к последнему ребенку, не обращаясь ко всем своим родителям.

Мне нужно вызвать событие на этом компоненте.

FlexGlobals.topLevelApplication.child1.child2.child3.dispatchEvent(new Event('clearData', true)); 

Обновлено: Я попробовал путь вы предложили в пункте 1. я добавил слушатель события на ребенка компонента и попытаться направить его из файла сценария действий, но он пошел unheared \

child3.addEventLisener('clearData', clearHandler); 
.

а потом я отправил событие нечто вроде:

dispatchEvent(new Event(modelApp.CLEAR_PALETTE, true) 

ответ

0

Как я понял из вопрос не использует никаких хороших принципов разработки приложений, но это другой вопрос.
В вашем случае вы можете использовать сцену как глобальную currentTarget для событий пузырьков. Событие отправки из displayObject с bubbles = true; В целевом отображаемом объекте прослушать событие с фазой объекта с фазой захвата/вывода.

в любом DisplayObject:

dispatchEvent(new Event("myEvent", true)); 

в целевом DisplayObject:

// add ADDED_TO_STAGE event listener in constructor or when component creation complete 
protected function component_creationCompleteHandler(event:FlexEvent):void 
{ 
    addEventListener(Event.ADDED_TO_STAGE, onAddToStage); 
} 

.. 

protected function onAddToStage(event:Event):void 
{ 
    stage.addEventListener("myEvent", eventHandler, true); 
} 

protected function eventHandler(event:Event):void 
{ 
    trace("eventHandler"); 
} 

Это лучше, чем использование ссылки на объект FlexGlobals. Код более гибкий.

0

Я думаю, что вы должны идти вниз до уровня компонента и addEventListener на Initialize. и отправьте туда, где захотите.

другой способ это сделать, вам нужно сохранить ссылку на компонент (ID) в объекте на createComplete. сохраните его подтверждение в своей модели. теперь вы можете получить к нему доступ, когда захотите. и делай, что хочешь.

Я также сделал это таким образом, я сохранил свой коэффициент отображения экрана в массиве и получил доступ к нему, где мне нужно динамически проверять все компоненты.

В противном случае вам понадобится вложенный цикл, чтобы получить необходимый вам ребенок.

1

пытаются добавить

FlexGlobals.topLevelApplication.systemManger.addEventLisener('clearData', clearHandler); 

в child3

и dispacthed его от любого, где вы хотите,

для отправки использовать следующие

FlexGlobals.topLevelApplication.systemManager.dispatchEvent(new Event(modelApp.CLEAR_PALETTE, true) 
Смежные вопросы