0

私は Flex を初めて使用し、イベントを理解するのに苦労しています。イベントは、自分の状況で使用したいものだと思います。私は2つのコンポーネントを持っていaddUser.mxmlますlistUsers.mxml. メイン アプリケーションの ViewStack からこれらにアクセスします。ロードlistUsers.mxmlすると、HTTPService 呼び出しを介してデータグリッドに現在のユーザーのリストが表示されます。フォームを使用してユーザーを追加すると、そのビューに戻って新しいユーザーを表示するときにaddUser.mxmlデータグリッドを更新したいと思います。andlistUsers.mxmlでいくつかの異なることを試しましたが、うまくいかないようです。誰かがこのロジックで私を助けることができますか?addEventListenerdispatchEvent

--

コメント用のサンプル コード。関連性のないものを解析しました。

adduser は次のようになります。

<mx:HTTPService id="httpService" 
        url="{'http://someurl.com'}" 
        useProxy="false" 
        method="POST"
        fault="faultHandler()"      
        result="resultHandler(event)"
         />


public function addUser():void{  
            if(validateForm()){
                params = {};
                params['action'] = 'adduser';
                params['firstName'] = firstName.text;           
                params['lastName'] = lastName.text;
                params['email'] = email.text;
                params['isActive'] = isActive.selected;

                httpService.cancel();   
                httpService.addEventListener("result", addUserResult);                      
                httpService.send(params);
            }
}

public function addUserResult(event:ResultEvent):void{
            var result:Object = event.result;

            //reset fields if add user was successful
            if(result.returnXML.action=='adduser'){

                var m:String = result.returnXML.message.toString();                                 
                    if(result.returnXML.status=='fail'){                        
                        Alert.show(m, null, Alert.OK, null, null, Application.application.IconError);
                    }
                    if(result.returnXML.status=='success'){                     
                        firstName.text = "";            
                        lastName.text = "";
                        email.text = "";
                        isActive.selected = true;

                        Alert.show(m, null, Alert.OK, null, null, Application.application.IconSuccess);
                    }                   
            }                   
}   


<mx:Button id="addButton" label="Add" click="addUser();" />

listUsers は次のようになります。

<mx:HTTPService id="httpListService" 
        url="{'http://someurl.com'}" 
        useProxy="false" 
        method="POST"
        fault="faultHandler()"      
        result="resultHandler(event)"
         />


<mx:DataGrid id="dgUsers"                         
                itemClick="dgClickEvent(event);"                          
                width="85%" 
                maxHeight="500"             
                >

                <mx:columns>
                    <mx:DataGridColumn headerText="First Name" dataField="fn" />
                    <mx:DataGridColumn headerText="Last Name" dataField="ln" />
                    <mx:DataGridColumn headerText="Email" dataField="email"  />
                    <mx:DataGridColumn headerText="Active" dataField="active" />
                </mx:columns>
            </mx:DataGrid>
4

2 に答える 2

0

イベントリスナーが必ずしも正しい方法だとは思いません。イベントリスナーを使用して、何か他のものを検出したときに何かを行います。つまり、UI コンポーネントでのマウス ダウンをリッスンする = マウス ダウンを検出し、ドラッグ操作を行います。

あなたの例を考えると、関数を連鎖させるだけでよいと思います。あなたのaddUser関数は、リストユーザーがデータを取得するのと同じソースにユーザーを保存するように見えるので、あなたの立場では、ユーザーの追加結果の最後にlistUsers httpServiceを呼び出して、データグリッドにデータを入力するデータを更新します。

httpListService.send()

httpListService の結果ハンドラーは表示されませんが、dataGrid のデータを更新する場所です。

頑張ってください。合併症があれば投稿してください。

于 2010-04-07T15:20:27.483 に答える
0

動作しました。これが私がしたことです-基本的に、親ビュースタックがlistUsersビューにフォーカスを当てるたびに、httpListServiceを送信し、addUserコンポーネントまたはその他のコンポーネントのイベント(または非イベント)に関係なくデータグリッドを更新します。ネットワーク トラフィックが増加しますが、私のプロジェクトの範囲では許容範囲です。

listUsers.mxml で:

<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="init()">

...

public function init():void{
    //vsUsers is my view stack on the main application component
    Application.application.vsUsers.addEventListener(IndexChangedEvent.CHANGE, refreshUsersGrid);           
}

...

public function refreshUsersGrid(e:IndexChangedEvent):void{     
    //if the new viewable child is the list users view, then refresh the datagrid   
    if(Application.application.vsUsers.getChildAt(e.newIndex).name=='viewListUsers'){               
        //the sendListUsersRequest method fires the HTTPService send method and binds the results to the datagrid
        sendListUsersRequest();
    }
}
于 2010-04-08T14:38:30.793 に答える