2012-07-17 66 views
0

我想在Flex中使用resourceManager進行一些本地化。我遇到了一個奇怪的問題,它在我嘗試使用的第一個文件中工作正常,但在第二個文件中它甚至不會編譯。Flex resourceManager在一個文件中完美工作,在另一個文件中完全不工作

兩個文件都

import mx.resources.ResourceBundle; 

在頂部和

[ResourceBundle("Hurley")] 

類定義的上方。第一個編譯良好,並在運行時正確地從資源中提取文本。

第二個文件(這是在同一個項目,但不同的文件夾),將無法編譯,並ResourceManager中的每一個提給出一個錯誤「1120:未定義的屬性的ResourceManager的訪問」

對於兩個不同的用途:

在文件中的作品:

public function SeasonsComboBox() { 
    this.labelFunction = function(obj:Object):String { 
     return resourceManager.getString('Hurley','Season_word') + " " + obj.number; 
    }; 
} 

和文件不起作用:

public function getCarousels(seriesId:String, callback:Function):void { 
    [...] 
    ExternalInterface.addCallback("getCarouselsFailure", function():void { 
      Alert.show(resourceManager.getString('Hurley','CarouselsFailure_text'), "Error", Alert.OK); 
     }); 
    [...] 
    } 

我想不出什麼不同的是我在兩個文件中都做了

編輯,解決:

ResourceManager會在是UIComponent子類中定義。工作的文件導入了ComboBox。沒有的文件沒有。在這些文件,我可以把它通過調用工作:

ResourceManager.getInstance() 

這裏的更多信息:http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/resources/IResourceManager.html

+0

做一類擴展的東西,可以訪問到ResourceManager,而其他不?你是否在第二課中定義了resourceManager?用你已經顯示的短代碼片段很難說。 – JeffryHouser 2012-07-17 20:16:20

+0

這兩個文件都不會擴展任何處理resourceManager的內容。我沒有明確地在任何一個文件中定義resouceManager,ResourceBundle已經這樣做了,如[示例](http://livedocs.adobe.com/flex/3/html/help.html?content=l10n_4.html) 。我沒有發佈完整的代碼,因爲它有很多,我不認爲它的大部分是相關的。 – 2012-07-17 21:22:37

+0

沒關係,你是對的。一個類導入ComboBox,它作爲UIComponent已經有一個resourceManager。 – 2012-07-17 22:51:20

回答

3

,你不能訪問reourceManager屬性的原因,是因爲它可能是沒有定義。

它在UIComponent上定義,以使得延伸在UIComponent,將有它定義的任何類。但是,否則你必須自己定義它。

你可以這樣做,使用這樣的事情:

public var resourceManager:ResourceManager = ResourceManager.getInstance(); 
+0

實際上應該是resourceManager:IResourceManager,因爲這是返回的實際實例的類型。 – 2012-07-18 00:01:18

+0

@ user1532702好點。 ResourceManager應該實現IResourceManager,所以兩者都可以工作。除非您計劃將自己的resourceManager作爲Flex中包含的替代品,否則可能並不重要。 – JeffryHouser 2012-07-18 01:28:06

相關問題