簡體   English   中英

如何在彈出窗口中將彈出窗口設置為全局?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM