Обновление внешних компонентов Flex из действия - PullRequest
0 голосов
/ 07 апреля 2010

Я новичок во Flex и у меня проблемы с пониманием событий. Я думаю, что события - это то, что я хочу использовать в своей ситуации. У меня есть 2 компонента, addUser.mxml и listUsers.mxml. Я получаю доступ к ним из ViewStack в моем основном приложении. Когда я загружаю listUsers.mxml, он показывает список текущих пользователей в сетке данных через вызов HTTPService. Когда я добавляю пользователя с помощью формы на addUser.mxml, я бы хотел, чтобы сетка данных в listUsers.mxml обновлялась, когда я возвращаюсь в это представление, чтобы показать нового пользователя. Я пробовал несколько разных вещей с addEventListener и dispatchEvent, но не могу заставить его работать. Может ли кто-нибудь помочь мне с этой логикой?

-

Пример кода для комментария, я разобрал не относительные вещи.

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>

Ответы [ 2 ]

0 голосов
/ 08 апреля 2010

Получил это работает. Вот что я сделал - в основном каждый раз, когда родительский viewstack фокусирует представление 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();
    }
}
0 голосов
/ 07 апреля 2010

Я не думаю, что слушатели событий - это то, что нужно. Вы используете прослушиватель событий, чтобы что-то делать при обнаружении чего-то другого. т. е. прослушивание мыши на компоненте пользовательского интерфейса = обнаружить мышь, выполнить операцию перетаскивания.

Учитывая ваш пример, я думаю, вам просто нужно объединить свои функции. Похоже, что ваша функция addUser сохраняет пользователя в тот же источник, откуда ваши пользователи получают данные из списка, поэтому на вашей позиции я бы вызвал httpUervice listUsers в конце результата добавления пользователя, чтобы обновить ваши данные, заполнив сетку данных.

httpListService.send()

Я не вижу ваш обработчик результатов для httpListService, но именно здесь вы обновляете данные в своей dataGrid.

удачи, и, пожалуйста, отправляйте сообщения с любыми осложнениями.

...