Flex访问变量从一个组件到另一个组件

时间:2010-07-18 21:08:32

标签: flex actionscript

我有一个主应用程序,它声明了一个int变量。我想在另一个包中存在的另一个组件中访问此变量。我怎么能这样做?

Main.mxml(默认包)

<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
                       xmlns:s="library://ns.adobe.com/flex/spark" 
                       xmlns:mx="library://ns.adobe.com/flex/mx"
                               preinitialize = "foo()">
    <fx:Script>
            <![CDATA[
                         public var value1:int;
                         public function foo():void {
                            value1 = 5;
                         }

                ]]>
        </fx:Script>

    <\s:Application>

Comp.mxml(components package)

<?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"
                 creationcomplete = "foo2()">
           <fx:Script>
                <![CDATA[
                            public function foo2(): void{
                             //------> access value1 from Main.mxml here.
                            }

                    ]]>
            </fx:Script>

</s:Group>

4 个答案:

答案 0 :(得分:2)

由于您需要的变量位于主应用程序类中,因此您可以使用parentApplication属性来访问它。

Main(this.parentApplication).value;
//or
Main(Application.application).value;

通常,执行此操作的正确方法是将源对象(在本例中为应用程序)的引用传递给调用方对象 - 或者通过某些公共属性传递值本身。假设主应用程序本身存在问题Comp,您可以执行以下操作:

<!-- Main.mxml : make value1 [Bindable] if you need the updates to be 
    reflected automatically  -->

<custom:Comp val="{this.value1}"/>

<!-- Comp.mxml : declare val as a public variable/property -->
<fx:Script>
    <![CDATA[
      public var val:int;
    ]]>
</fx:Script>

答案 1 :(得分:0)

你需要进行某种重定向,比如告诉组件在哪里看,即:

<fx:Script>
  <![CDATA[
    [Bindable] public var myapp:Application = null;
    public function get value1():int 
    { 
      return ( myapp == null ? 0 : myapp.value1 ); 
    }
    public function foo2():void 
    {
      var i:int = this.value1;
    }
  ]]>
</fx:Script>

在申请中:

<package:Comp myapp="this" />

否则,您可以创建某种单例 - 一个类范围的静态变量。但那太乱了。

答案 2 :(得分:0)

您的主应用程序应该引用组件需要int值的内容。并且应该从您的主应用程序设置值。如果需要设置值以响应组件中的事件,则组件可以触发并调度事件,主应用程序可以具有事件侦听器,然后传递所需的int。

您还可以绑定主要应用操作脚本中的值: BindingUtils.bindProperty(this,“i”,this.component,“i”),但前面的方法是一种更好的做法。

答案 3 :(得分:0)

自定义活动如何。

http://livedocs.adobe.com/flex/3/html/help.html?content=createevents_3.html

创建自定义事件时,可以在整个应用程序中访问该变量。

否则请转到

mx.core.Application.application访问主应用程序