0

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

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

请给建议...

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) 正在转换为全局范围,所以它的值 Used in Any Where 。

4

2 回答 2

1

如果您在全局范围内使用这些值,那么无论您所说的“将弹出窗口设置为全局”是什么意思,我强烈怀疑单例事件调度程序会为您提供最佳服务。

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();

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

于 2013-01-04T00:03:10.187 回答
1

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

另外我打赌你不能访问声明为私有的arrayC ArrayCollection 变量,所以你不能访问。

需要遵循几个步骤

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

为您的应用程序使用单例类

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{}

更多细节单例模式

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...等。

但更好的是我们必须避免单例类(单元测试困难..等)。

于 2013-01-04T07:22:03.877 回答