2013-01-03 55 views
0

其實在我的Flex應用程序有一些彈出窗口,我想參加這個彈出窗口的一些值,但值會正在添加NULL如何在Flex中將彈出窗口設置爲全局?

因此如何使一個彈出窗口作爲全球?因爲我們正在全球使用這些值。

請給建議...

Edit 

我編輯了一些代碼...

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

現在具有可變像...

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

NOw我想在Demo2.mxml中使用arrayC然後..

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

但聽到ac包含空值爲什麼?

然後,現在我正在思考Demo2.mxml(PopUpWindow)正在轉換爲全局範圍,所以它的值在任何地方使用。

+0

什麼'使一個彈出窗口爲全球'是什麼意思?恐怕我不明白你的問題。 – RIAstar

+0

請澄清你的問題。你可能試圖從應用程序的其他地方訪問彈出窗口中的值? – 2013-01-03 13:18:31

+0

全球在flex?真? –

回答

1

由於您嘗試創建新實例,因此每個實例都有自己的狀態。

另外我敢打賭,你不能訪問arrayC ArrayCollection變量聲明爲私人所以你不能acccess。

需要遵循幾個步驟

[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 1.mxml arrayC變量

var demo1_arrayC = Model.getInstance().arrayC; 

注意,您可以在任何地方訪問arrayC的ArrayCollection在你的應用程序一樣Demo2.mxml,Demo3 ...等。

但更好的是我們必須避免Singleton類(單元測試difficult ..等)。

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相同的數據。

相關問題