2009-02-21 82 views
1

如果我在flex mxml文件中包含外部動作文件,則在編譯時會根據所使用的方法獲得不同的行爲。使用帶有源屬性或包含語句的mx腳本標記,然後編譯該文件會出現如下錯誤:在flex應用程序中包含外部動作文件的最佳做法

錯誤:程序包無法嵌套。

如果使用導入這些錯誤消失和文件編譯,但然後我嘗試實例化類時遇到問題。

import lib.journal; 
    public var testing:journal = new journal(); 
    testing.init(); 

這給:

錯誤:未定義的屬性測試的訪問。

任何人都可以解釋這裏發生了什麼?包含文件而不是導入文件對包和範圍有什麼影響?

謝謝,

回答

4

要回答更一般的問題:導入是包含外部文件的首選方式。在我看來,include聲明應該只在沒有別的事情可以使用時纔會使用,因爲如果出現錯誤並且使代碼通常更難以閱讀和理解,它會使調試變得更加困難。 Assaf對importinclude所做的描述是正確的。

然後對於您看起來更具體的問題:您可能試圖在<script>塊中執行 testing.init(); - 嘗試將其置於方法中。你只應該在腳本塊中直接使用像import語句和成員聲明(變量,函數)之類的東西,以及類似於函數中的語句。

您看到該錯誤消息,因爲當您調用此對象的init()方法時,該方法尚未創建 - 當您的MXML文件所代表的類定義爲裝;你想要的是在創建這個類的特定實例時執行它,並且可以通過在類的構造函數中調用它來實現它(這是,據我所知,寫作時不可能一類使用MXML,在處理函數,以便閱讀:)或例如爲FlexEvent.CREATION_COMPLETE(在MXML標籤上還是creationComplete屬性)事件(見下面的例子。)

嘗試是這樣的:

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application 
    xmlns:mx="http://www.adobe.com/2006/mxml" 
    width="800" height="600" 
    creationComplete="creationCompleteHandler();" 
> 
    <mx:Script> 
     <![CDATA[ 

     import lib.Journal; 

     public var testing:Journal = new Journal(); 

     private function creationCompleteHandler():void 
     { 
      testing.init(); 
     } 

     ]]> 
    </mx:Script> 

</mx:Application> 
+0

謝謝。這更有意義。但是,我現在得到了 錯誤:通過靜態類型日誌引用調用可能未定義的方法init。 – codecowboy 2009-02-21 17:25:45

2

導入讓您訪問導入的文件的公共聲明。

包括將as3文件的內容植入包含位置,就好像您在那裏輸入了一樣。

請參見「Comparing, including, and importing ActionScript code」的使用說明書。

+0

感謝您的答覆,但這不能回答我的問題。我已經看過您多次發佈的鏈接。上面的代碼中有錯嗎?爲什麼我會收到這些錯誤? – codecowboy 2009-02-21 16:50:43

0

試試這個:

<mx:Script> 
    <![CDATA[ 

    import lib.Journal; 

    public var testing:Journal; 

    private function creationCompleteHandler():void 
    { 
     testing = new Journal(); 
    } 

    ]]> 
</mx:Script> 

乾杯, Dirk

相關問題