如何在弹出窗口中将弹出窗口设置为全局?

时间:2013-01-03 12:17:40

标签: actionscript-3 flex flex4 flex3 mxml

实际上在我的Flex应用程序中有一些弹出窗口,我想在这个弹出窗口中取一些值,但值正在变化NULL

那么如何将PopUp窗口设为全局?因为我们在全球范围内使用这些值。

请提出建议......

Edit

我用一些代码编辑......

Main.mxml(Main Aplication),    Demo1.mxml(PopUpWindow),    Demo2.mxml(PopUpWindow)

现在Demo1.mxml中的变量类似于......

[Bindable]private var arrayC:ArrayCollection=new ArrayCollection();//Hear Some value their.

我想要在Demo2.mxml中使用arrayC然后..

public var variable1:Demo1=new Demo1();
var ac:ArrayCollection = new ArrayCollection();
ac = variable1.arrayC;

但是听到ac包含Null Value么?

然后,现在我正在思考Demo2.mxml(PopUpWindow)正在转换为全局范围,因此它的值在任何地方使用。

2 个答案:

答案 0 :(得分:1)

如果您正在全局使用这些值,那么无论您将“将PopUp窗口设为全局”是什么意思,我强烈怀疑您最好是由单身事件调度员服务。

package com.example.demo.models {
    import flash.events.IEventDispatcher;
    import flash.events.EventDispatcher;
    [Bindable]
    class MyGlobalStuff extends EventDispatcher {
        public var someGlobalValue:*;

        private var _instance:MyGlobalStuff;

        public function MyGlobalStuff (lock:SingletonLock, target:IEventDispatcher=null) {
            super(target);
            if(!(lock is SingletonLock)) {
                throw(new Error("MyGlobalStuff is a singleton, please do not make foreign instances of it"));
            }
        }

        public static function getInstance():MyGlobalStuff {
             if(!_instance) {
                  _instance = new MyGlobalStuff (new SingletonLock());
             }
             return _instance;
        }
    }
}
class SingletonLock{}

这个想法是这样的:你将弹出窗口绑定到

{myStuffModel.someGlobalValue}

myStuffModel将在您的mxml中初始化为:

protected var myStuffModel:MyStuffModel = MyStuffModel.getInstance();

然后在整个应用程序的任何其他类中,您可以通过单例模型绑定或访问EXACT相同的数据。

答案 1 :(得分:1)

Null因为您尝试创建新实例,以便每个实例都有自己的状态。

另外我敢打赌你无法访问声明为private的arrayC ArrayCollection变量,因此你无法访问。

需要遵循几个步骤

[Bindable]public var arrayC:ArrayCollection=new ArrayCollection(); //制作公共变量

为您的应用程序使用Singleton类

package com.foo.bar {

public class Model {

    private static var instance : Model;

    public function Model( enforcer : SingletonEnforcer ) {}

    public static function getInstance() : Model {
        if (!instance) {
            instance = new Model( new SingletonEnforcer() );
        }
        return instance;
    }

    public var arrayC:ArrayCollection = new ArrayCollection();
}
}

class SingletonEnforcer{}

有关详细信息Singleton pattern

private var popup:Demo1;
popup = PopUpManager.createPopUp(this,Demo1,true) as Demo1;    
popup.arrayC =  Model.getInstance().arrayC; // Here set value from Model class
PopUpManager.centerPopUp(popup);

假设您尝试在Demo2.mxml

中访问demo1.mxml arrayC变量
var demo1_arrayC = Model.getInstance().arrayC;

请注意,您可以在应用程序的任何位置访问arrayC arraycollection,如Demo2.mxml,Demo3 ...等。

但更好的是我们必须避免使用Singleton Class(单元测试diffcult ..etc)。