2010-12-07 11 views
2

データグリッドを含むWebアプリケーションがあります。そのグリッドの任意の行をダブルクリックするとポップアップが開きます(ポップアップ1と呼ぶことができます)。今度はこのpopup1が再び新しいポップアップを開きます(popup2と呼ぶことができます)。Flexでポップアップからポップアップにデータを渡す

popup2を閉じると、popup1にObjectを渡す必要があります。それを行う最も簡単な方法はどれですか?事前に

おかげ

(PS:popup1からpopup2を開いている間、私はpopup2のCloseイベントにイベントリスナーを追加してい)

+0

あなたは、私が投稿答えを試す機会がありました:

package { import flash.events.Event; import mx.collections.ArrayCollection; public class MyCustomEvent extends Event { public var myDataToPass:ArrayCollection; public function MyCustomEvent (type:String, bubbles:Boolean=true, cancelable:Boolean=false) { super(type, bubbles, cancelable); } } } 

は、データを渡すような何か? –

+0

@Jason実際には、代わりに共有オブジェクトを使用していました:P – Vishal

+0

SharedObjectsを使用してポップアップの間にデータを渡していますか?ユーザーがローカルストレージを無効にしたらどうなりますか?コンポーネント間でオブジェクトを渡すより良い方法があるはずです。 –

答えて

-1

私はちょうど作り、popup2を行います新しい関数を呼び出しますwindow(PopUpManagerを介して)を呼び出し、オブジェクトをこの関数に渡します。 popup2の子(おそらくtitlewindowやパネルのカスタムコンポーネント)は、オブジェクトから取り込まれるか、オブジェクトを渡すことができます。

private function displayPopUp2(object:Object):void 
    { 
    //create an instance of your window 
    var popup2:CustomComponentPopUp2 = new CustomComponentPopUp2(); 
    //pass the object data to a function within side this to populate fields, or this could be done through constructor. 

    popup2.populateData(object); 

    //then use popup manager to display popup... passing the popup2 as it's child. 
    PopUpManager.addPopUp(popup2); 

    } 

これはこれを行う1つの方法です。

+0

popup2が閉じられると、popup2からpopup1にデータを戻す必要があります。 – Vishal

+0

ああ、申し訳ありませんが、あなたの質問を誤解しました。その場合、次のポップアップを開くために関数が呼び出され、それを閉じる前に、必要な情報をすべて取得し、オブジェクトに格納して新しいポップアップに渡すことができます。 – ajay87

0

IMHO解決策はbu @ ajay87が間違っていることを示唆しています。

popup1はpopup2を「知る」べきではありません。それらは切り離されている必要があります。ビューは他のビューで関数を呼び出すべきではありません。

この種の動作はイベントを使用して実装する必要があります。ポップアップ2を開き、ディスパッチおよびイベント(ポップアップ2でそれを聴く)する必要があります。

他の方法は同じです。ポップアップ2から送出されたイベントを使用してデータを取得する必要があります。関数などをアクティブにしないでください。

このように、ビューは分離されており、実装を変更したり、この機能を使わないでポップアップ2を表示したり、その逆もできます。

+1

少し極端な、あなたは思いませんか?まず第一に、誰もここで特定のパターンを使用することについて何も言及しなかった。第二に、そのパターンの文脈でも、コンポーネントをすべてビューとして本当に考えることはできません。 –

2

popup2が終了したときに発動するカスタムイベントを作成します。ポップアップを閉じる直前に、あなたのデータをイベントに追加し、それを消してください。 Popup1はMyCustomEventのイベントリスナーを持ち、myDataToPassプロパティにアクセスできます。

MyCustomEvent:

var newEvent:MyCustomEvent = new MyCustomEvent(); 
newEvent.myDataToPass = <your data here>; 
dispatchEvent(newEvent); 
関連する問題