一个Flex 对话框的坑

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

首先,能够排除没有引入包 import mx.controls.Alert;的问题。若是没有引入包的话,编译会出现错误。因此这一点能够排除掉。web

可是这个工程以前就能够弹出对话框啊,为何如今不能正常弹出呢?系统原生的对话框居然不起做用!是否是由于文本的css设置有问题呢?好比字体或者颜色的设置形成了文本的不可见?有可能啊。而后本身设置了下css,背景设置为白色,字体设置为红色。从新编译,坐等奇迹的发生。可是对话框除了个框框仍是什么都没有!看来css的设置没有起做用。字体

那会不会被别的css给覆盖了呢?本着这个想法,去工程里面去找,果真,不出我所料,一个css的页面自定义了Alert的样式,而后果断注释了这段代码,从新编译,等待惊喜,失望了,惊喜没有发生。仍是之前那个样子。flex

虽然到目前为止,对话框仍是不能正常使用,可是能够确定一点的是,跟css没有关系。那就只剩下两种可能了:ui

(1)对话框自己有问题;(2)对话框没有问题,可是系统可能不支持。this

对话框自己会有问题么?想到这里,忽然想起系统自己其余地方也有使用对话框的啊。搜索引擎

而后仔细看了下之前弹出对话框的代码。有收获,发现以前对话框不是原生的Alert,而是一个被封装的AlertInfo,该AlertInfo继承 了Panel,完成了对对话框的模拟!ok,看到这里,应该比较清楚了,怎么去作一个对话框。用自定义的AlertInfo,去模拟一个对话框。果断spa

new AlertInfo;从新编译,这回应该是问题不大了。但是没有我想象的那么简单,依然有问题。并且,该系统不只使用了自定义的AlertInfo,并且使用了原生的Alert。插件

这下该使人头疼了。原生对话框不能使用,自定义对话框不能使用,就连之前正常能够运行的对话框也没法正常使用了!xml

有点烦躁。冷静了一下后,开始从新思考面前的问题。目前我正在使用的升级工程,那么我从新创建一个新的文件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只弹框,不显示文本的问题就所有结束了。纵观整个过程,发现问题,分析问题,假设,求证,发现问题的症结,解决问题,最后升级系统。

 若是发现问题后,一开始就使用谷歌,可能会减小不少时间去解决这个问题。谷歌虽然强大,但我仍是愿意先去本身作一些摸索,作一些分析,万不得以,再去考虑搜索引擎。谁说假设求证不也是一件很愉快的事情呢?虽然这个过程耗费时间会比较长。

相关文章
相关标签/搜索