Flex DataGrid 中的 itemEditEnd 事件

itemEditEnd event in Flex DataGrid

所以,我正在研究如何 edit/validate 在 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 后,它只显示一个两行的网格;在编辑网格中的任何 phone 数字并在其外部单击后(意味着编辑的单元格失去焦点,因此 Flex 将其解释为 "the edit has ended",从而触发 itemEditEnd 事件,调用check() 函数)消息 "hi there!" 将出现。我的问题是:如果我一次只编辑一个 phone 号码,为什么它会出现两次?据我所知,每次我编辑 phone 号码时,该消息应该只出现一次,而不是两次。关于框架的工作原理,我是否遗漏了什么?

这就像一个错误。当我点击 tab/enter 或点击另一个单元格时。这会生成 itemEditEnd 事件 并将焦点移动到新的可编辑单元格。

itemEditEnd 事件 的事件处理程序中,显示了一个警报。此弹出窗口会从该可编辑单元格中移除焦点...从而调度第二个 itemEditEnd 事件.

因此,为此您必须为此添加一些逻辑以防止出现第二个警告框。比如,设置一个boolean变量,当alert一次时设为true。

同样的问题已经在这里问了。

Why does Alert.show() give me two Alert boxes?

而且,很多人以前遇到过同样的问题。

希望对您有所帮助。