Flex的4:从组件主要应用程序访问的公共方法 [英] Flex 4: Accessing public method in main application from component
本文介绍了Flex的4:从组件主要应用程序访问的公共方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我需要能够调用自设下的主要应用Flex 4中的组件的方法谁能告诉我,请如何做到这一点,而无需使用FlexGlobals好吗?
样品code连接。先谢谢了。
// TestApp.mxml(应用程序)
< XML版本=1.0编码=UTF-8&GT?;
< S:的WindowedApplication的xmlns:FX =http://ns.adobe.com/mxml/2009
XMLNS:S =库://ns.adobe.com/flex/spark
的xmlns:MX =库://ns.adobe.com/flex/mx
的creationComplete =initApp()>
< FX:脚本>
<![CDATA [
进口com.TestComp;
进口mx.managers.PopUpManager;
公共职能在myMethod():无效
{
// 做一点事
}
保护功能initApp():无效
{
VAR弹出:testcomp隔离=新testcomp隔离();
PopUpManager.addPopUp(弹出,这一点,真正的);
}
]]≥
< / FX:脚本>
&所述; /秒:的WindowedApplication>
// TestComp.mxml(组分)
< XML版本=1.0编码=UTF-8&GT?;
< S:组的xmlns:FX =http://ns.adobe.com/mxml/2009
XMLNS:S =库://ns.adobe.com/flex/spark
的xmlns:MX =库://ns.adobe.com/flex/mx
WIDTH =400HEIGHT =300>
< FX:脚本>
<![CDATA [
私有函数DoSomething的(事件:MouseEvent)方法:无效
{
//在TestApp.mxml调用myMethod的()
}
]]≥
< / FX:脚本>
< S:按钮点击=DoSomething的(事件)的标签=点击我/>
< / S:组>
解决方案
这是不好的设计。你应该提供一个回调函数或事件侦听器。
// TestComp.mxml
< MX:元数据>
[事件(名称=doSomethingEvent,键入=对象类型:flash.events.Event)
< / MX:元数据>
< MX:脚本>< [CDATA [!
私有函数DoSomething的(事件:MouseEvent)方法:无效
{
this.dispatchEvent(新的事件(doSomethingEvent));
}
]]≥&所述; / MX:脚本>
// TestApp.mxml
保护功能initApp():无效
{
VAR弹出:testcomp隔离=新testcomp隔离();
popUp.addEventListener(doSomethingEvent,myMethod的);
PopUpManager.addPopUp(弹出,这一点,真正的);
}
私有函数myMethod的(事件:事件):无效
{
// 做一点事
}
这是一个回调的例子:
// TestComp.mxml
公共变种doSomethingCallback:功能;
私有函数DoSomething的(事件:MouseEvent)方法:无效
{
doSomethingCallback.call();
}
// TestApp.mxml
保护功能initApp():无效
{
VAR弹出:testcomp隔离=新testcomp隔离();
popUp.doSomethingCallback = myMethod的;
PopUpManager.addPopUp(弹出,这一点,真正的);
}
私有函数在myMethod():无效
{
// 做一点事
}
I need to be able to call a method from a component located under the main application in Flex 4. Can anyone tell me please how to do this without using FlexGlobals please?
Sample code is attached. Thanks in advance.
// TestApp.mxml (application)
<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
creationComplete="initApp()">
<fx:Script>
<![CDATA[
import com.TestComp;
import mx.managers.PopUpManager;
public function myMethod():void
{
// do something
}
protected function initApp():void
{
var popUp:TestComp = new TestComp();
PopUpManager.addPopUp(popUp, this, true);
}
]]>
</fx:Script>
</s:WindowedApplication>
// TestComp.mxml (component)
<?xml version="1.0" encoding="utf-8"?>
<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
width="400" height="300">
<fx:Script>
<![CDATA[
private function doSomething(event:MouseEvent):void
{
// call to myMethod() in TestApp.mxml
}
]]>
</fx:Script>
<s:Button click="doSomething(event)" label="Click Me"/>
</s:Group>
解决方案
This is bad design. You should provide a callback function or an event listener.
// TestComp.mxml
<mx:Metadata>
[Event(name="doSomethingEvent", type="flash.events.Event")]
</mx:Metadata>
<mx:Script><![CDATA[
private function doSomething(event:MouseEvent):void
{
this.dispatchEvent(new Event("doSomethingEvent"));
}
]]></mx:Script>
// TestApp.mxml
protected function initApp():void
{
var popUp:TestComp = new TestComp();
popUp.addEventListener("doSomethingEvent", myMethod);
PopUpManager.addPopUp(popUp, this, true);
}
private function myMethod(event: Event): void
{
// do something
}
And this is a callback example:
// TestComp.mxml
public var doSomethingCallback: Function;
private function doSomething(event:MouseEvent):void
{
doSomethingCallback.call();
}
// TestApp.mxml
protected function initApp():void
{
var popUp:TestComp = new TestComp();
popUp.doSomethingCallback = myMethod;
PopUpManager.addPopUp(popUp, this, true);
}
private function myMethod(): void
{
// do something
}
这篇关于Flex的4:从组件主要应用程序访问的公共方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文