Flex выполняет функцию в другом представлении - PullRequest
0 голосов
/ 05 июня 2011

У меня есть headerbar.mxml, который отображается, когда пользователь swipes_down в моем приложении.Headerbar.mxml содержит компонент кнопки, которую я хочу запустить erase () в главном окне приложения.Основное приложение - это приложение для рисования, которое содержит функцию erase ().Я просто не знаю, как вызвать функцию из другого файла представления mxml.Я думал, что это будет что-то вроде click = "{mainwindow.drawPanel.erase ()}";

РЕДАКТИРОВАТЬ:

protected function onColorChange(event:List):void{
                appHome.drawArea.erase();
            }

1 Ответ

2 голосов
/ 05 июня 2011

Для запуска функции в другом представлении (компонент AKA) Это в значительной степени зависит от архитектуры. Похоже, вы хотите запустить функцию в своем родителе. В этом случае метод «правильной инкапсуляции» заключается в отправке события из component1; прослушать событие в компоненте parent1s; и выполнить функцию из прослушивателя событий.

Итак, где-то в родительской панели заголовка, добавьте прослушиватель событий:

headerbarInstance.addEventListener('parentDoSomething', onHeaderBarToldMeTo);

Я бы, вероятно, добавил это в конструктор, если компонент ActionSCript 3, или в обработчик события предварительной инициализации, если компонент MXML. Компоненту 'parent' также понадобится функция слушателя:

protected function onHeaderBarToldMeTo(event:Event):void{
  erase();
}

Когда щелкает компонент кнопки в headerbar.mxml, и это запускает обработчик события щелчка внутри панели заголовка, который должен отправить событие, например:

protected function onButtonInheaderbarClick(Event:Event):void{
 dispatchEvent(new Event('parentDoSomething'));
}

И все должно волшебным образом работать. Возможно, вам придется вспомнить событие, если функция не находится внутри прямого потомка родителя.

Если вас не волнует инкапсуляция, вы также можете просто получить доступ к родителю напрямую. Таким образом, ваш компонент панели заголовка сделает это:

parent.erase();

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

...