Обновление внешних компонентов Flex из действия
Я новичок в 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 ответа
Получил это работает. Вот что я сделал - в основном каждый раз, когда родительский стек просмотра фокусируется на представлении 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();
}
}
Я не думаю, что слушатели событий - это обязательно путь. Вы используете прослушиватель событий, чтобы что-то делать при обнаружении чего-то другого. т.е. прослушивание мыши на компоненте пользовательского интерфейса = обнаружить мышь вниз, выполнить операцию перетаскивания.
Учитывая ваш пример, я думаю, вам просто нужно объединить свои функции. Похоже, что ваша функция addUser сохраняет пользователя в тот же источник, откуда ваши пользователи получают данные из списка, поэтому в вашей позиции я бы вызвал httpUervice listUsers в конце результата добавления пользователя, чтобы обновить ваши данные, заполняющие сетку данных.
httpListService.send()
Я не вижу ваш обработчик результатов для httpListService, но именно там вы обновляете данные в своей dataGrid.
удачи, и, пожалуйста, отправьте обратно с любыми осложнениями.