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 値が含まれているのはなぜですか?

次に、Demo2.mxml(PopUpWindow) がグローバル スコープに変換されていると考えているので、値は Any Where で使用されます。

4

2 に答える 2

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;

Demo2.mxml、Demo3... など、アプリケーション内のどこからでも arrayC arraycollection にアクセスできることに注意してください。

しかし、Singleton クラス (単体テストが難しいなど) は避けたほうがよいでしょう。

于 2013-01-04T07:22:03.877 に答える
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 に答える