实际上在我的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)正在转换为全局范围,因此它的值在任何地方使用。
答案 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)。