Flex DataGrid中的itemEditEnd事件

时间:2015-04-10 16:36:13

标签: actionscript-3 events flex datagrid flex3

因此,我正在研究如何在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;会出现。我的问题是:如果我一次只编辑一个电话号码,为什么会出现两次?据我所知,该消息只应在每次编辑电话号码时出现一次,而不是两次。关于框架是如何运作的,我有什么遗漏吗?

1 个答案:

答案 0 :(得分:0)

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

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

所以,为此,你必须为此设置一些逻辑以防止第二个警报框。比如,设置一个boolean变量,并在警报一次时生效。

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

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

并且,许多人之前也遇到过同样的问题。

希望它有所帮助。