最近在项目中遇到一个问题,在Flex中使用Alert.show("this is content!", "title");发现对话框可以弹出来,但是文本始终不显示。why? 由此开始了我苦逼的排查之路。

 
首先,可以排除没有引入包 import mx.controls.Alert;的问题。如果没有引入包的话,编译会出现错误。所以这一点可以排除掉。
但是这个工程之前就可以弹出对话框啊,为什么现在不能正常弹出呢?系统原生的对话框竟然不起作用!是不是因为文本的css设置有问题呢?比如字体或者颜色的设置造成了文本的不可见?有可能啊。然后自己设置了下css,背景设置为白色,字体设置为红色。重新编译,坐等奇迹的发生。但是对话框除了个框框还是什么都没有!看来css的设置没有起作用。
 
那会不会被别的css给覆盖了呢?本着这个想法,去工程里面去找,果然,不出我所料,一个css的页面自定义了Alert的样式,然后果断注释了这段代码,重新编译,等待惊喜,失望了,惊喜没有发生。还是以前那个样子。
 
虽然到目前为止,对话框还是不能正常使用,但是可以肯定一点的是,跟css没有关系。那就只剩下两种可能了:
(1)对话框本身有问题;(2)对话框没有问题,但是系统可能不支持。
 
对话框本身会有问题么?想到这里,突然想起系统本身其他地方也有使用对话框的啊。
然后仔细看了下以前弹出对话框的代码。有收获,发现之前对话框不是原生的Alert,而是一个被封装的AlertInfo,该AlertInfo继承 了Panel,完成了对对话框的模拟!ok,看到这里,应该比较清楚了,怎么去做一个对话框。用自定义的AlertInfo,去模拟一个对话框。果断
new AlertInfo;重新编译,这回应该是问题不大了。可是没有我想象的那么简单,依然有问题。而且,该系统不仅使用了自定义的AlertInfo,而且使用了原生的Alert。
 
这下该令人头疼了。原生对话框不能使用,自定义对话框不能使用,就连以前正常可以运行的对话框也无法正常使用了!
 
有点烦躁。冷静了一下后,开始重新思考面前的问题。目前我正在使用的升级工程,那么我重新建立一个新的文件test.mxml文件,里面只写了一句话:Alert.show("content","title");震精了,竟然也不正常!好吧!使用Flex Builder 重新建立一个Flex项目,新建一个test.mxml文件,发现新项目的可以正常弹出对话框。为何?我仔细比对了两个文件。发现两个mxml的根标签Application就不一样。
升级工程中test.mxml的代码:
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml "
                layout=" absolute" minWidth=" 955" minHeight="600"
                creationComplete="init()">
</mx:Application>
新工程中的test.mxml代码:
<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">
</s:Application>
 很显然,两者所引用的库是不一样的。升级工程中是flex3引用的库,而新工程中则是flex4引用的工程,而且两者的标签是不同的,flex3是以<mx:Application></mx:Application>开始,而flex4是以<s:Application></s:Application>开始。为什么会出现这种情况呢?即使是出现这种情况,flex3应该也支持Alert的,那在升级工程中的Alert为啥不正常呢?而且关键是两者使用的都是flex4.1 的sdk。可能跟编译环境有关。看了下两者的编译选项,果然就发现问题了。原来升级工程中使用的兼容flex3的模式。而新项目则没有使用。那在兼容模式下就不能正常使用Alert了?上网谷歌了一下,发现有很多网友也有的问题。原来Flex4和Flex3 的差别还是蛮大的。包括Alert在内的很多控件在兼容模式下都无法正常使用。好吧,既然是兼容因起来的问题,那果断去掉兼容。重新编译,对话框出来了,文本也出来了。所以问题的最终原因不是对话框的问题,是系统环境的原因。可是主工程使用的明明是Flex4,升级工程凭什么搞一个Flex3出来?看了下升级工程的日期,创建日期是2013年7月。为何不和主工程(升级工程算是主工程的一个插件)使用同样的环境?可能前同事出于其他原因的考虑吧,或者说就是无意埋下的坑。好吧,为了为了和主工程保持一致,我将Flex3升级为Flex4,样式由默认的helo该为spark,重新跑一遍程序。看起来是无大碍了。
 
到此为止,花了整整一天时间,一个Alert只弹框,不显示文本的问题就全部结束了。纵观整个过程,发现问题,分析问题,假设,求证,发现问题的症结,解决问题,最后升级系统。
 
 如果发现问题后,一开始就使用谷歌,可能会减少很多时间去解决这个问题。谷歌虽然强大,但我还是愿意先去自己做一些摸索,做一些分析,万不得以,再去考虑搜索引擎。谁说假设求证不也是一件很愉快的事情呢?虽然这个过程耗费时间会比较长。
 

一个Flex 对话框的坑的更多相关文章

  1. Android 如何监听返回键,弹出一个退出对话框

    android 如何监听返回键点击事件,并创建一个退出对话框, 防止自己写的应用程序不小心点击退出键而直接退出.自己记录下这个简单的demo,备用. public class BackKeyTest ...

  2. [转]Android 如何监听返回键,弹出一个退出对话框

    本文转自:http://blog.csdn.net/sunnyfans/article/details/8094349 Android 如何监听返回键点击事件,并创建一个退出对话框, 防止自己写的应用 ...

  3. 转 如何在调用WCF服务之前弹出一个确认对话框

    自定义InteractiveChannelInitializer(InvocationConfirmationInteractiveChannelInitializer)定义如下.我们在BeginDi ...

  4. 一个flex buider 3 在eclipse下不能编译的问题解决

    今天处理一个遗留的项目:项目使用了flex作为界面,装好flex Builder 3 并添加插件到eclipse,eclipse使用3.7版本. 导入项目,编译,发现编译时候出现 Errors run ...

  5. 测者的测试技术手册:Junit单元测试遇见的一个枚举类型的坑(枚举类型详解)

    Enum的简介 枚举类型很早就在计算机语言中存在了,主要被用来将一组相似的值包含进一种类型中,这种类型的名称被定义成独一无二的类型描述符,这就是枚举类型. 在java语言中,枚举类型是一个完整功能的类 ...

  6. 【Java】Android EditText开发的一个容易忽略的坑

    这几天接手做一个远程控制Android application,安卓前台的EditText用来输入ip地址.端口等信息,发现EditText的使用存在着巨坑一个! 我在网上找了半天,发现仅仅有人提出这 ...

  7. 一个关于cookie的坑

    #问题:今天上午踩了一个坑,首先,这个小案例的运行结果是应该是在前端页面出现一个当前时间的,当然如果是首次登陆的话应该是显示"第一次登陆",第二次则会显示上次的登录时间,但是却没有 ...

  8. Android: 创建一个AlertDialog对话框,必须按确定或取消按钮才能关闭对话框,禁止按[返回键]或[搜索键]关闭

    AlertDialog.Builder builder = new Builder(this); builder.create().show(); 这样显示出来的对话框,当用户按返回键或搜索键时,这个 ...

  9. MFC 关于new出一个新对话框时,退出对话框内存泄漏的问题解决

    问题: 在进行点击按钮弹出对话框时,我是用了new来生成一个新的对话框,但是在新对话框关闭的时候,经过检查发现,新对话框存在内存泄漏问题. 原因: 因为使用了new,但是当时没有找到地方进行delet ...

随机推荐

  1. 为 Android 8.0 添加开机启动脚本【转】

    本文转载自:https://zhuanlan.zhihu.com/p/32868074 本人对于 SELinux for Android 理解不深,下文中的各文件及安全规则虽都是我所编写,但也是一边查 ...

  2. Mysql相关问题收集

    1.查询每个班级的前三名 DROP TABLE IF EXISTS `sc`; CREATE TABLE `sc` ( `id` ) NOT NULL AUTO_INCREMENT, `name` v ...

  3. java 类构造器中加入有参构造器及调用顺序【思路】

    package com.ykmimi.new1; /** * * @author deadzq * */ public class AnyThing { public AnyThing() { thi ...

  4. WebApi——json返回多了 k_BackingField

    产生原因: model类添加了    [System.Serializable] 解决方案: xxxxx.WebApi\App_Start\WebApiConfig.cs的Register函数中添加如 ...

  5. Select2下拉框总结

    用了这么久的Select2插件,也该写篇文章总结总结.当初感觉Select2不是特别好用,但又找不到比它更好的下拉框插件. 在我的印象里Select2有2个版本,最新版本有一些新的特性,并且更新了一下 ...

  6. 【Cuda编程】加法归约

    目录 cuda编程并行归约 AtomicAdd调用出错 gpu cpu下时间计算 加法的归约 矩阵乘法 矩阵转置 统计数目 平方和求和 分块处理 线程相邻 多block计算 cuda编程并行归约 At ...

  7. 初识C++继承

    先是自己凭借自己在课堂上的记忆打了一遍.自然出了错误. //编译错误 #include <iostream> #include <cstdlib> using namespac ...

  8. 01_Kafka概述

    1.Kafka背景 * LinkedIn开发,2011年成为Apache的一个开源项目* 2012年,成为Apache的一个顶级项目* 基于java和Scala编写, 基于发布-订阅模型的消息系统(离 ...

  9. 使Apache支持PHP

    1.用记事本打开Apache安装目录下conf文件夹中的httpd.conf文件,找到LoadModule部分的配置代码,在该部分添加下面的代码,将PHP模块加载到Apache服务中,使得Apache ...

  10. Myeclipse下配置svn

    转载高鑫的..嘻嘻.. MyEclipse安装配置SVN 2013.10.15 No Comments 67 Views 配置之前请先关闭MyEclipse,OK开始了 1.解压site-1.6.18 ...