Я не уверен, что мой заголовок действительно отражает то, что здесь происходит ... Я просто понял, что, очевидно, мне не хватает фундаментального принципа в том, как Flex обрабатывает данные (память?), И мне нужна некоторая помощь, чтобы понять это.
У меня есть таблица MySQL с именем friends, которая содержит следующие строки:
MySQL table friends
+-----------+----------+
| firstname | lastname |
+-----------+----------+
| Mark | Smith |
| Andrew | Barnes |
+-----------+----------+
В следующем примере я три раза вызываю свой friendsService.getAllFriends (), а затем присваиваю результат DataProvider трех разных DataGrids.
Во второй раз, когда я отправляю запрос в базу данных, я меняю имя Марка на Питер, только перед тем, как присваивать результат DataProvider. Я не обновляю базу данных каким-либо образом, верно? : -)
Что я ожидаю:
MyDataGrid1
+-----------+----------+
| firstname | lastname |
+-----------+----------+
| Mark | Smith |
| Andrew | Barnes |
+-----------+----------+
MyDataGrid2
+-----------+----------+
| firstname | lastname |
+-----------+----------+
| Peter | Smith | <---- Say hello to Peter :-)
| Andrew | Barnes |
+-----------+----------+
MyDataGrid3
+-----------+----------+
| firstname | lastname |
+-----------+----------+
| Mark | Smith |
| Andrew | Barnes |
+-----------+----------+
После вызова второго запроса (тот, где я переключаю Марка на Питера программно), похоже, что все три результата связаны каким-то образом, я не понимаю ... Я получаю:
MyDataGrid1
+-----------+----------+
| firstname | lastname |
+-----------+----------+
| Peter | Smith |
| Andrew | Barnes |
+-----------+----------+
MyDataGrid2
+-----------+----------+
| firstname | lastname |
+-----------+----------+
| Peter | Smith |
| Andrew | Barnes |
+-----------+----------+
MyDataGrid3
+-----------+----------+
| firstname | lastname |
+-----------+----------+
| Peter | Smith |
| Andrew | Barnes |
+-----------+----------+
Похоже, Flex на самом деле не запрашивает новые данные, предполагая, что он уже получил ответ от friendsService.getAllFriends () ...
Есть ли у меня какое-то просветление? : -)
СПАСИБО!
<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
xmlns:friendsservice="services.friendsservice.*"
creationComplete="creationCompleteHandler(event)">
<fx:Script>
<![CDATA[
import mx.controls.Alert;
import mx.events.FlexEvent;
import mx.rpc.events.ResultEvent;
private var _step:Number = 1;
protected function creationCompleteHandler(event:FlexEvent):void
{
getAllFriends();
}
protected function getAllFriends():void
{
getAllFriendsResult.token = friendsService.getAllFriends();
}
protected function getAllFriendsResult_resultHandler(event:ResultEvent):void
{
if (_step == 1) {
assignValuesToDataGrid(MyDataGrid1, event.result, _step);
dbg.text = "MyDataGrid1 has been loaded";
}
if (_step == 2) {
assignValuesToDataGrid(MyDataGrid2, event.result, _step);
dbg.text = "MyDataGrid2 has been loaded";
}
if (_step == 3) {
assignValuesToDataGrid(MyDataGrid3, event.result, _step);
dbg.text = "MyDataGrid3 has been loaded";
}
_step++;
}
protected function assignValuesToDataGrid(dg:DataGrid, result:Object, step:Number):void
{
if (step == 2)
result[0].firstname = "Peter";
dg.dataProvider = result;
}
]]>
</fx:Script>
<fx:Declarations>
<s:CallResponder id="getAllFriendsResult" result="getAllFriendsResult_resultHandler(event)"/>
<friendsservice:FriendsService id="friendsService"/>
</fx:Declarations>
<s:layout>
<s:VerticalLayout/>
</s:layout>
<s:Button label="Load next DataGrid" click="getAllFriends()"/>
<mx:DataGrid id="MyDataGrid1" width="100%" height="100">
<mx:columns>
<mx:DataGridColumn headerText="First name" dataField="firstname"/>
<mx:DataGridColumn headerText="Last name" dataField="lastname"/>
</mx:columns>
</mx:DataGrid>
<mx:DataGrid id="MyDataGrid2" width="100%" height="100">
<mx:columns>
<mx:DataGridColumn headerText="First name" dataField="firstname"/>
<mx:DataGridColumn headerText="Last name" dataField="lastname"/>
</mx:columns>
</mx:DataGrid>
<mx:DataGrid id="MyDataGrid3" width="100%" height="100">
<mx:columns>
<mx:DataGridColumn headerText="First name" dataField="firstname"/>
<mx:DataGridColumn headerText="Last name" dataField="lastname"/>
</mx:columns>
</mx:DataGrid>
<s:Label id="dbg" fontWeight="bold"/>
</s:WindowedApplication>