我有一个主应用程序,它声明了一个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>
答案 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
访问主应用程序