我有一個用Flex編寫的Web應用程序,我試圖從使用條件編譯的相同代碼庫構建AIR應用程序。Flex(Actionscript)和導入語句中的條件編譯
在AIR應用程序中,我需要有import語句,如下列: 進口flash.data.SQLConnection使用; import flash.filesystem.File; 但我不能在Web應用程序中擁有這些導入語句,因爲它們是僅限AIR的類。
我以爲我可以使用條件編譯來解決這個問題,但是我在頁http://help.adobe.com/en_US/flex/using/WS2db454920e96a9e51e63e3d11c0bf69084-7abd.html上閱讀以下內容:「您不能使用常量布爾值來條件化元數據或導入語句。」
如果是這樣的話,我怎麼能有基於Flex的網絡以及桌面應用中常見的代碼庫?有沒有人解決了這個難題?
感謝,
迪利普
更多關於這個問題的一些試驗和錯誤之後...... 我已經在Eclipse 3個項目爲這個項目......一個用於Web應用程序,一個用於AIR應用程序和一個用於通用的源代碼。在Web和AIR項目中,我指向了通用源代碼。在通用代碼中,我使用了條件編譯,看起來您可以執行以下操作: CONFIG :: desktopMode {0} {0} {0} import flash.data.SQLConnection; import flash.events.SQLEvent; import flash.events.SQLErrorEvent; import flash.filesystem.File; }
和類似的方法來包括在編譯期間幅或AIR特定的功能。該方法似乎迄今爲止工作!
我遇到的唯一問題是我的Cairngorm模型定位器。如果我在Cairngorm的模型定位器中將CONFIG :: desktopMode放在導入語句中,它會開始給出「編譯器中未捕獲的異常」或「1131類不能嵌套」的錯誤。我不知道如何解決這個錯誤!
迪利普
好的訣竅,但是讓很可怕的代碼:P – 2011-06-10 18:44:24
@J_A_X,同意。而對於我來說,我更喜歡將平臺相關代碼提取到具有通用接口的獨立類中。通過使用某些依賴注入容器或其他方式(如您在答案中所述)使用接口注入特定實現來使用這些類。 – Constantiner 2011-06-10 18:50:28