[英]flex 3 accessing main mxml from actionscript code
我正在编写一个ActionScript类来处理我的Web服务调用。 当我检索结果时,我想在我的主mxml应用程序中调用setter方法。 我的问题是,我不知道如何从我的actionscript类,任何想法访问我的主mxml类的actionScript部分中的方法?
David是对的 - 虽然您可以静态地从应用程序的任何位置访问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>
在这种情况下,最终结果是相同的 - 完成Web服务加载会触发Main.mxml中的函数。 但请注意mywrapper_webServiceComplete()
是如何mywrapper_webServiceComplete()
声明的 - 它不是由MyWrapperClass
直接MyWrapperClass
。 Main.mxml只是订阅(使用addEventListener()
),以便在MyWrapperClass完成其工作时得到通知,然后自己完成工作; MyWrapperClass对Main.mxml的实现细节一无所知,除了调度webserviceComplete
事件外,Main.mxml也不了解MyWrapperClass,并公开了一个公共的doWork()
方法。 松散的耦合和信息隐藏在行动中。
祝好运!
如果您的类是添加到组件树的UIComponent,那么您可以使用其parentApplication
属性。 否则,请使用静态Application.application
属性,但仅在应用程序初始化完成后使用。 早于此,该字段为null
。 显然无法访问私有字段和方法。 在具有显式id
的MXML部分中声明的元素是公共的。
但是,添加此类调用会创建严格的绑定。 您可能需要考虑调度事件,并在主应用程序中处理此事件。
万一有人有同样的问题:
mx.core.FlexGlobals.topLevelApplication.YOUR_FUNCTION
是访问main.mxml中的公共函数的语法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.