最近在項目中遇到一個問題,在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只彈框,不顯示文本的問題就所有結束了。縱觀整個過程,發現問題,分析問題,假設,求證,發現問題的癥結,解決問題,最後升級系統。
若是發現問題後,一開始就使用谷歌,可能會減小不少時間去解決這個問題。谷歌雖然強大,但我仍是願意先去本身作一些摸索,作一些分析,萬不得以,再去考慮搜索引擎。誰說假設求證不也是一件很愉快的事情呢?雖然這個過程耗費時間會比較長。