[英]How to Make Popup window as Global in Flex?
實際上在我的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包含空值為什么?
然后,現在我正在思考Demo2.mxml(PopUpWindow)正在轉換為全局范圍,因此它的值在任何位置使用。
如果你在全球范圍內使用這些值,那么無論你的意思是“將一個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相同的數據。
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模式
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)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.