Дэвид прав - в то время как вы можете получить доступ к открытым членам вашего объекта Application.mxml статически и из любого места в вашем приложении, с точки зрения дизайна это немного нет-нет. Лучше стремиться к слабой связи между вашими объектами, и способ, который делается в идиоме Flex, обычно заключается в расширении EventDispatcher и отправке событий. Например, ваша оболочка WebService может выглядеть примерно так:
public class MyWrapperClass extends EventDispatcher
{
[Event(name="webserviceComplete", type="flash.events.Event")]
public function MyWrapperClass(target:IEventDispatcher=null)
{
super(target);
}
private function handleWebServiceLoadComplete(event:ResultEvent):void
{
dispatchEvent(new Event("webserviceComplete"));
}
public function doWork():void
{
// Load the service, etc., and ultimately call handleWebServiceLoadComplete()...
}
}
... и ваш файл Main.mxml так:
<mx:Script>
<![CDATA[
private function app_creationComplete(event:Event):void
{
var myWrapper:MyWrapperClass = new MyWrapperClass();
myWrapper.addEventListener("webserviceComplete", mywrapper_webServiceComplete, false, 0, true);
myWrapper.doWork();
}
private function mywrapper_webServiceComplete(event:Event):void
{
// Do the work you would've otherwise done in the public method
}
]]>
</mx:Script>
В этом случае конечный результат тот же - завершение загрузки веб-службы вызывает функцию в Main.mxml. Но обратите внимание, как mywrapper_webServiceComplete()
объявляется в частном порядке - он не вызывается напрямую MyWrapperClass
. Main.mxml просто подписывается (с addEventListener()
) на уведомление, когда MyWrapperClass завершает свою работу, а затем выполняет свою собственную работу; MyWrapperClass ничего не знает о деталях реализации Main.mxml, и при этом Main.mxml ничего не знает о MyWrapperClass, кроме того, что он отправляет событие webserviceComplete
и предоставляет открытый метод doWork()
. Слабая связь и скрытие информации в действии.
Удачи!