![]() |
|
||||||||||
|
|||||
|
[+6 25.07.10]
Регистрация: Sep 2009
Сообщений: 35
|
Почему если поставить для DataGrid функцию на событие ItemEditEnd, то эта функция срабатывает несколько раз?
Вот мой mxml: <mx:DataGrid rowCount="8" sortableColumns="false" id="yearGrig" dataProvider="{buildGridData}" height="100%" editable="true" itemEditEnd="onItemEditEnd(event)"> <mx:columns> <mx:DataGridColumn headerText="Description\Year" dataField="label" width="160" backgroundColor="#CCCCC9" textAlign="right" fontWeight="bold" editable="false" /> <mx:DataGridColumn headerText="" width="90" editable="true" id="yearMinusTwu" dataField="yearMinusTwo" labelFunction="format"/> <mx:DataGridColumn headerText="" width="90" editable="true" id="yearMinusOne" dataField="yearMinusOne" labelFunction="format"/> <mx:DataGridColumn headerText="" width="90" editable="true" id="todayYear" dataField="todayYear" labelFunction="format"/> <mx:DataGridColumn headerText="" width="90" editable="true" id="yearPlusOne" dataField="yearPlusOne" labelFunction="format"/> <mx:DataGridColumn headerText="" width="90" editable="true" id="yearPlusTwu" dataField="yearPlusTwo" labelFunction="format"/> </mx:columns> </mx:DataGrid> private function onItemEditEnd(event:DataGridEvent):void{ var currentColumn:String; if(event.columnIndex==1){ currentColumn="yearMinusTwu"; }else if(event.columnIndex==2){ currentColumn="yearMinusOne"; }else if(event.columnIndex==3){ currentColumn="todayYear"; }else if(event.columnIndex==4){ currentColumn="yearPlusOne"; }else if(event.columnIndex==5){ currentColumn="yearPlusTwu"; } Alert.show(buildGridData[event.rowIndex]['label'].toString()+' = '+buildGridData[event.rowIndex][currentColumn].toString()); event.preventDefault(); yearGrig.destroyItemEditor(); } Если кто с таким сталкивался, помогите плиз) |
|
|||||
|
Регистрация: Jan 2010
Сообщений: 211
|
Может, язык не очень стелется в силу слабой теоретической подготовки, но причину вижу четко, так как сам в свое время наигрался с эдитами и рендерами, что и попытаюсь объяснить ...
К моменту вызова алерта строка находится в режиме редактирования (дестрой еще не наступил); напомню - это строка из коллекции, готорая гарантированно биндится. И в самом алерте происходит обращение к этой коллекции. При попытке получить значение поле (в первом случае "label", во втором - currentColumn) коллекция пытается получить значение поля редактируемой строки, что без "сброса" редактирования нельзя. Поэтому вызывается эвент окончания редактирования. В алерте два обращения - будет два повтора вызова функции. Если поставить алерт после удаления эдитора, такой проблемы не будет. P.S. Я сейчас не вспомню, в чем была загвоздка, но точно помню, что если event.preventDefault() вызван до дестроя эдитора, то что-то шло не так. Конечно, необъективно, но зерно в этом есть. |
|
|||||
|
[+6 25.07.10]
Регистрация: Sep 2009
Сообщений: 35
|
да)оно так и было)поменял все местами
yearGrig.destroyItemEditor(); event.preventDefault(); Alert.show(event.dataField+' = '+buildGridData[event.rowIndex]['label'].toString()+' = '+buildGridData[event.rowIndex][currentColumn].toString()); спасибо большое) |
![]() |
![]() |
Часовой пояс GMT +4, время: 02:09. |
|
|
« Предыдущая тема | Следующая тема » |
|
|