0

我是 Flex 的新手,无法理解事件。我认为事件是我想在我的情况下使用的。我有 2 个组件,addUser.mxml并且listUsers.mxml. 我从我的主应用程序中的 ViewStack 访问这些。当我加载listUsers.mxml它时,它会通过 HTTPService 调用显示数据网格中的当前用户列表。当我使用表单添加用户时,addUser.mxml我希望在listUsers.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

得到它的工作。这就是我所做的 - 基本上每次父视图堆栈使 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 回答
0

我认为事件侦听器不一定是要走的路。您使用事件侦听器在检测到其他内容时执行某些操作。即)在 ui 组件上侦听鼠标按下 = 检测鼠标按下,执行拖动操作。

鉴于您的示例,我认为您只需要将您的功能链接在一起。看起来您的 addUser 函数将用户保存到与列表用户从中获取数据的源相同的源,因此在您的位置上,我会在添加用户结果的末尾调用 listUsers httpService 来刷新填充数据网格的数据。

httpListService.send()

我没有看到 httpListService 的结果处理程序,但这是您更新 dataGrid 中数据的地方。

祝你好运,如有任何并发​​症,请回复。

于 2010-04-07T15:20:27.483 回答