最近在项目中遇到一个问题,在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. 关于Qt跨线程调用IO子类的理解

    一.疑问 突然想到,类似于QTcpsocket和QSerialport这类对象,如果是在A线程中new的,那就不能在其他线程中访问.我一般是这样做的: 封装一个QObject子类,放这些对象进去,然后 ...

  2. 分布式事务之——tcc-transaction分布式TCC型事务框架搭建与实战案例(基于Dubbo/Dubbox)

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/73731363 一.背景 有一定分布式开发经验的朋友都知道,产品/项目/系统最初为了 ...

  3. YOLOv3-darknet 内容解析

    目录 Yolov3-darknet 内容解析 多标签分类预测 跨尺度预测 网络结构改变 reference Yolov3-darknet 内容解析 YOLOv3是到目前为止,速度和精度最均衡的目标检测 ...

  4. 【转载】Multiboot规范

    转自:Multiboot规范 Multiboot规范 本文定义了Multiboot规范--提议中的引导过程标准.本文是此规范的0.6.93版. Multiboot规范简介 本章描述了一些关于Multi ...

  5. UVa 1149 装箱

    https://vjudge.net/problem/UVA-1149 题意:给定N个物品的重量和背包的容量,同时要求每个背包最多装两个物品.求至少需要的背包数. 思路:很简单的贪心.每次将最轻的和最 ...

  6. 环境安装问题:tensorflow 问题记录 python2.7 和 python3.6发生冲突

    似乎是pip在python2.7和python3.6中发生冲突 我想用pip但是python2里没有装pip 但是tensorflow是和python2相关联的 所以我在python2中装pip的过程 ...

  7. c++ 多继承 public

    以下代码会报错 #include <iostream> using namespace std; class Sofa { public: Sofa(); ~Sofa(); void si ...

  8. ubuntu server 多网卡

    https://wenku.baidu.com/view/51fb15742f60ddccdb38a007.html

  9. python 斐波那契查找

    def fibonacci_search(lis, key): # F = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987 ...

  10. GRASP (职责分配原则)

    要学习设计模式,有些基础知识是我们必须要先知道的,设计模式是关于类和对象的一种高效.灵活的使用方式,也就是说,必须先有类和对象,才能有设计模式的用武之地,否则一切都是空谈,那么类和对象是从那冒出来的呢 ...