2011-08-02 10 views
0

私が探している答えが得られません。 メインアプリケーションに送られたリクエストデータを送信したいと思います。あなたのタグはあなたが理解する意味としてポップアップからメインアプリケーションにデータを送信します。

<?xml version="1.0" encoding="utf-8"?> 
<mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml" remove="titlewindow1_removeHandler(event)" 
       width="400" height="220" layout="absolute" title="USER LOGIN"> 
    <mx:Metadata> 
     [Event(name="commEvent", type="flash.events.Event")] 
    </mx:Metadata> 
    <mx:Script> 
     <![CDATA[ 
      import data.Data; 

      import mx.events.FlexEvent; 
      import mx.managers.PopUpManager; 


      [Bindable] 
      public var userID:String; 

      private function loginUser():void{ 
       trace("btn"); 
       var req:URLRequest = new URLRequest('http://localhost/CCN/userProcess.php'); 
       var loader:URLLoader = new URLLoader(); 
       req.method="POST"; 

       var variables:URLVariables = new URLVariables(); 
       variables.email= username.text; 
       variables.password= password.text; 
       variables.action= "login_user"; 
       req.data=variables; 

       loader.addEventListener(Event.COMPLETE,onDataLoaded); 
       loader.load(req); 
      } 
      protected function loginButton_clickHandler(event:MouseEvent):void 
      { 
       // TODO Auto-generated method stub 

       loginUser(); 
      } 


      private function onDataLoaded(e:Event):void{ 
       var xml:XML= new XML(e.target.data); 
       if(xml.status=="success"){ 

       //SEND DATA TO MAIN APPLICATION ???? 
        PopUpManager.removePopUp(this); 

       }else{ 
        fail.visible=true; 
        username.text=""; 
        password.text=""; 
        username.setFocus(); 
       } 


      } 

      protected function loginButton_keyDownHandler(ee:KeyboardEvent):void 
      { 
       // TODO Auto-generated method stub 
       if(ee.keyCode==13){ 
        loginUser(); 
       } 
      } 

      protected function titlewindow1_removeHandler(event:FlexEvent):void 
      { 
       // TODO Auto-generated method stub 

      } 

     ]]> 
    </mx:Script> 

    <mx:TextInput id="username" x="141" y="31" width="199" text=""/> 
    <mx:TextInput keyDown="loginButton_keyDownHandler(event)" text="000" id="" x="141" y="84" width="199" displayAsPassword="true"/> 
    <mx:Button id="loginButton" x="275" y="133" label="LOGIN" click="loginButton_clickHandler(event)"/> 
    <mx:Label x="22" y="33" text="Email"/> 
    <mx:Label x="22" y="86" text="Password"/> 
    <mx:Label x="22" visible="false" y="135" id="fail" color="#FF0000" text="LOGIN FAILED"/> 
</mx:TitleWindow> 

は、ここでは、メインアプリケーションコード

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 
       minWidth="955" minHeight="600" backgroundColor="#FFFFFF" 
       creationComplete="application1_creationCompleteHandler(event)" layout="absolute"> 
    <mx:Script> 
     <![CDATA[ 
      import mx.containers.TitleWindow; 
      import mx.core.IFlexDisplayObject; 
      import mx.events.CloseEvent; 
      import mx.events.FlexEvent; 
      import mx.managers.PopUpManager; 

      //private var loginWindow:TitleWindow; 
      public var user:String; 
      private var login:Login 

      private function application1_creationCompleteHandler(event:FlexEvent):void 
      { 
       // TODO Auto-generated method stub 
       login = Login(
        PopUpManager.createPopUp(this, Login, true)); 
       PopUpManager.centerPopUp(login); 


       //login['loginButton'].addEventListener(MouseEvent.CLICK,onClose); 
       login.addEventListener(CloseEvent.CLOSE,oncc) 

      } 
      private function onClose(e:Event):void{ 
       trace("Trace : "+login.userID); 
      } 
      private function 


     ]]> 
    </mx:Script> 
</mx:Application> 

答えて

0

私はカスタムイベントを追加することでこれを解決推薦です。

そうでない場合は、次の手順を実行してください。

1)新しいイベントタイプを作成します(ActionScriptでEventクラスを拡張 - クローン(上書きしてください)))

2をポップアップ

に親アプリケーションに新しいイベントタイプのイベントリスナーを追加します。

3)ポップアップはそれが

4を閉じる前に)新しいイベントタイプを派遣、それはあなたが(ユーザーIDを探している?)イベントハンドラにあるものは何でもハンドルに起こします。

親が実際にlogin.userIDに対処しないように、実際のイベントにuserIDを付けることをお勧めします。緩やかなカップリングの観点から、より正確です。つまり、あなたがしたくない場合は、userIDを付けないことで解決策を簡素化できます。疎結合は大きな目標ですが、この関係を一度しか使用しない場合は、それほど必要ではありません。

より緊密なカップリングルートを選択すると、拡張イベントではなくカスタムの「タイプ」でイベントをディスパッチするだけで済みます。

低レベルの例(説明が少ない、コードが多い)が必要な場合は、教えてください。

以下に例を使用すると、データを格納するためのイベントを拡張少し複雑なバージョンです。

Eventクラス::ポップアップ::

private var loginSuccessful:Boolean = false; 

private function onDataLoaded(e:Event):void{ 
    var xml:XML= new XML(e.target.data); 
    if(xml.status=="success"){ 

     userID = username.text; 
     loginSuccessful = true;    
     //SEND DATA TO MAIN APPLICATION 
     dispatchEvent(new CustomEvent(CustomEvent.EVENT_TYPE_NAME, userID, loginSuccessful); 
     PopUpManager.removePopUp(this); 

    }else{ 
     fail.visible=true; 
     username.text=""; 
     password.text=""; 
     username.setFocus(); 
    }   
} 

protected function titlewindow1_removeHandler(event:FlexEvent):void 
{   
    if (!loginSuccessful) 
     dispatchEvent(new CustomEvent(CustomEvent.EVENT_TYPE_NAME," userID, loginSuccessful)); 
} 

そして、メインアプリケーションでは

package mycomponents 
{ 
    import flash.events.Event; 
    public class CustomEvent extends Event 
    { 
     public static const EVENT_TYPE_NAME:String = "myEventType" 

     public var mUserID:String = ""; 
     public var mSuccess:Boolean = false; 

     public function CustomEvent(aType:String, aUserID:String, aSuccess:Boolean) 
     { 
      super(aType) 
      mUserID = aUserID; 
      mSuccess = aSuccess; 
     } 

     override public function clone():Event 
     { 
      var lEvent:CustomEvent = new CustomEvent(mUserID, mSuccess); 
      return lEvent; 
     } 
    } 
} 

::

import mycomponents.CustomEvent; 

private function application1_creationCompleteHandler(event:FlexEvent):void 
{ 
    //...your code 
    login.addEventListener(CustomEvent.EVENT_TYPE_NAME, handleLoginEvent); 
} 

private function handleLoginEvent(aEvent:CustomEvent) 
{ 
    //My example code dispatches an event with mSuccess = false if the login prompt closes 
    //without a successful login 
    // 
    //now do whatever you want with the information from the popup 
    //aEvent.mUserID gets you ID 
    //aEvent.mSuccess gets you success 

} 

がでブレークの真ん中で一緒にそれを投げそれゆえ、約束どおりにコンパイルすることはできません。 .someコードは素晴らしいことだけれども、私はカスタムイベントを把握しようとしていた

+0

...実際にそれを取得できませんでした...ありがとう – kmarima

+0

@kmaは、コードのが、見てみましょう。それ以上必要な場合は、お気軽にお問い合わせください。 –

関連する問題