zoukankan      html  css  js  c++  java
  • 一个Flex 对话框的坑

    最近在项目中遇到一个问题,在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只弹框,不显示文本的问题就全部结束了。纵观整个过程,发现问题,分析问题,假设,求证,发现问题的症结,解决问题,最后升级系统。
     
     如果发现问题后,一开始就使用谷歌,可能会减少很多时间去解决这个问题。谷歌虽然强大,但我还是愿意先去自己做一些摸索,做一些分析,万不得以,再去考虑搜索引擎。谁说假设求证不也是一件很愉快的事情呢?虽然这个过程耗费时间会比较长。
     
  • 相关阅读:
    C#深入浅出 修饰符(二)
    HDU 5785 Interesting
    HDU 5783 Divide the Sequence
    HDU 5781 ATM Mechine
    UVA 714 Copying Books
    uva 1471 Defense Lines
    UVA 11134 Fabled Rooks
    UVA 11572 Unique Snowflakes
    UVA 11093 Just Finish it up
    UVA 10954 Add All
  • 原文地址:https://www.cnblogs.com/benshan/p/3774293.html
Copyright © 2011-2022 走看看