因此,我正在研究如何在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将其解释为&#34;编辑已结束&#34;,从而触发itemEditEnd
事件,调用check()
函数)消息&#34;嗨那里!&#34;会出现。我的问题是:如果我一次只编辑一个电话号码,为什么会出现两次?据我所知,该消息只应在每次编辑电话号码时出现一次,而不是两次。关于框架是如何运作的,我有什么遗漏吗?
答案 0 :(得分:0)
这就像一个bug。当我点击tab / enter或点击另一个单元格时。这会生成 itemEditEnd事件并将焦点移动到新的可编辑单元格。
在 itemEditEnd事件的事件处理程序中,将显示警报。此弹出窗口会从该可编辑单元格中移除焦点...从而调度第二个 itemEditEnd事件。
所以,为此,你必须为此设置一些逻辑以防止第二个警报框。比如,设置一个boolean
变量,并在警报一次时生效。
同样的问题已经在这里问了。
Why does Alert.show() give me two Alert boxes?
并且,许多人之前也遇到过同样的问题。
希望它有所帮助。