apache-flex - 为什么 Alert.show() 给我两个警报框?

标签 apache-flex

当我在采用 DataGridEvent 的函数中使用 Alert.show 时,我出现了奇怪的行为。

当执行Alert.show时,该函数会运行两次。

这是代码:

private function onItemEnd(event:DataGridEvent):void
{

    var pattern:RegExp =/[^a-z0-9A-ZéèçàêïôëËÉÊÈìíîïÌÍÎÏÇùúûü]/;
    var res:Boolean=pattern.test(texteSaisi);
    if(res==true){
        event.reason = DataGridEventReason.CANCELLED; 
        Alert.show("Le nom de l'option ne doit pas contenir des caractère spéciaux."); 
    }else{ 
        if (event.dataField == "libelle"){
            question.libelle = texteSaisi;
        }else if (event.dataField == "description") {
            question.description = texteSaisi;
        }

<mx:DataGrid 
    draggableColumns="false" 
    dataProvider = "{model.obtenirListeOptionsTarificationProposition}" 
    id = "gridOptions"
    rowCount = "10" 
    doubleClickEnabled = "true"
    itemClick = "onItemClick(event)" 
    change = "onChange(event)"
    width = "80%" 
    editable = "true"
    itemEditEnd = "onItemEnd(event)">

当调用此函数时,屏幕上出现两个警报,我不知道为什么。

最佳答案

我怀疑将警报与 itemEditEnd 事件结合使用是有问题的。编写了一个简单的测试用例,其行为不同(我的似乎进入了无限循环)。

问题是这样的:

  1. itemEditEnd 事件可以通过多种方式调度:键盘交互(在编辑单元格时按 Tab 键或按 Enter 键)、鼠标交互等。

  2. 我开始编辑单元格。然后我点击 Tab/Enter 或单击另一个单元格。这会生成 itemEditEnd 事件并将焦点移动到新的可编辑单元格。

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

在下面的测试应用程序中,我实际上创建了一个无限循环。

如果您需要在 itemEditEnd 事件之后显示警报,也许您可​​以在事件处理程序中添加一些逻辑(以便它第二次立即返回)。

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx"
               minWidth="955" minHeight="600"
               creationComplete="onCreationComplete()">

    <fx:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;
            import mx.controls.Alert;

            private function onCreationComplete():void
            {
                grid.dataProvider=createCollection();
            }


            private function createCollection():ArrayCollection
            {
                var tmp:Array = [];
                for (var i:int = 1; i<11; i++)
                {
                    tmp.push({ data: Math.random()*100, label: i.toString() + " label" });
                }
                return new ArrayCollection(tmp);
            }

            private function onItemEditEnd():void
            {
                Alert.show("item edit end");
            }

        ]]>
    </fx:Script>

    <mx:DataGrid id="grid" itemEditEnd="onItemEditEnd()" editable="true" />

</s:Application>

关于apache-flex - 为什么 Alert.show() 给我两个警报框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11052451/

相关文章:

apache-flex - 任何指向好的 AS3 代码片段/示例的指针?

java - 在 tomcat 中部署 java/flex 应用程序时访问文件时出现问题

apache-flex - 是否可以从 SWF 中检索矢量图形?

java - Flex 或 Actionscript 中的 Java 语法荧光笔

javascript - 弹性索引.html 模板

php - Flex json 自动更新数据网格

apache-flex - Flex 辅助功能 - Tab Focus 退出 Flex 应用程序

css - 不存在的线路上出现 Flash 错误 1071?

apache-flex - 是否可以在运行时使用Flash或FMS对音频流进行降采样?

apache-flex - swf流音频播放器