因此,我正在研究如何编辑/验证Flex 3 DataGrid单元格中的输入。下面是我用来学习的基本例子:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application
xmlns:mx="http://www.adobe.com/2006/mxml"
width="100%" height="100%" backgroundSize="100%">
<mx:DataGrid editable="true" itemEditEnd="check(event)">
<mx:columns>
<mx:DataGridColumn headerText="Name" dataField="name"/>
<mx:DataGridColumn headerText="Phone" dataField="phone"/>
</mx:columns>
<mx:dataProvider>
<mx:ArrayCollection>
<mx:Object name="John" phone="(69)2345-6798"/>
<mx:Object name="Mary" phone="(69)1234-5678"/>
</mx:ArrayCollection>
</mx:dataProvider>
</mx:DataGrid>
<mx:Script>
<![CDATA[
import mx.controls.Alert;
import mx.events.DataGridEvent;
import mx.collections.ArrayCollection;
private function check(event:DataGridEvent):void{
if(event.dataField == "phone"){
Alert.show("hi there!");
}
}
]]>
</mx:Script>
</mx:Application>在编译并运行.swf之后,它只显示一个有两行的网格;在编辑了网格中的任何电话号码并单击外部后(这意味着编辑的单元格失去焦点,因此Flex将其解释为“编辑已经结束”,从而触发了itemEditEnd事件,调用check()函数)消息"hi那里!“就会出现。我的问题是:如果我一次只编辑一个电话号码,为什么它会出现两次?据我所知,每次我编辑电话号码时,该消息只能出现一次,而不是两次。关于框架是如何工作的,我有什么遗漏吗?
发布于 2015-04-13 04:38:57
就像一只虫子。当我点击选项卡/输入或单击另一个单元格时。这将生成itemEditEnd事件,并将焦点移动到新的可编辑单元格。
在itemEditEnd事件的事件处理程序中,将显示警报。这个弹出移除可编辑细胞的焦点..。因此,分配了第二个itemEditEnd事件。
因此,您必须为其添加一些逻辑,以防止第二个警报框。例如,设置一个boolean变量,并在警告一次时使其生效。
同样的问题已经问过这里了。
Why does Alert.show() give me two Alert boxes?
而且,很多人以前也有过同样的问题。
希望能帮上忙。
https://stackoverflow.com/questions/29566484
复制相似问题