Flex的4:从组件主要应用程序访问的公共方法 [英] Flex 4: Accessing public method in main application from component

查看:95
本文介绍了Flex的4:从组件主要应用程序访问的公共方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要能够调用自设下的主要应用Flex 4中的组件的方法谁能告诉我,请如何做到这一点,而无需使用FlexGlobals好吗?

样品code连接。先谢谢了。

  // TestApp.mxml(应用程序)
< XML版本=1.0编码=UTF-8&GT?;
< S:的WindowedApplication的xmlns:FX =htt​​p://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 =htt​​p://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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆