Flex resourceManager работи перфектно в един файл и изобщо не работи в друг

Опитвам се да използвам resourceManager във Flex за известна локализация. Имам странен проблем, при който работи добре в първия файл, в който го пробвах, но във втория дори не се компилира.

И двата файла имат

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


person Ryan Coonan    schedule 17.07.2012    source източник
comment
Единият клас разширява ли нещо, което има достъп до resourceManager, докато другият не? Дефинирахте ли resourceManager във втория клас? С кратките кодови фрагменти, които показахте, е трудно да се каже.   -  person JeffryHouser    schedule 18.07.2012
comment
Нито един файл не разширява нищо, което се занимава с resourceManager. Не съм дефинирал изрично resouceManager в нито един от файловете, ResourceBundle вече прави това, според примера тук. Не публикувах пълния код, защото има тонове от него и не мисля, че повечето от тях са подходящи.   -  person Ryan Coonan    schedule 18.07.2012
comment
Няма значение, ти беше прав. Един клас импортира ComboBox, който като UIComponent вече има resourceManager.   -  person Ryan Coonan    schedule 18.07.2012
comment
Тогава го публикувах като официален отговор. Въпреки че импортирането на ComboBox няма да ви даде достъп до ResourceManager. Удължаването му ще.   -  person JeffryHouser    schedule 18.07.2012
comment
Добре, да, исках да кажа разширяване, а не импортиране. Благодаря. Освен това щях да публикувам самостоятелен отговор, но не можах, защото съм нов акаунт.   -  person Ryan Coonan    schedule 18.07.2012


Отговори (1)


Причината, поради която нямате достъп до свойството reourceManager, е, че вероятно не е дефинирано.

Той е дефиниран в UIComponent, така че всеки клас, който разширява UIComponent, ще го дефинира. Но в противен случай трябва да го определите сами.

Можете да го направите, като използвате нещо подобно:

public var resourceManager:ResourceManager = ResourceManager.getInstance();
person JeffryHouser    schedule 17.07.2012
comment
Това всъщност трябва да е resourceManager:IResourceManager, тъй като това е типът на действителния екземпляр, който се връща. - person Ryan Coonan; 18.07.2012
comment
@user1532702 Добра точка. ResourceManager трябва да имплементира IResourceManager, така че и двете ще работят. Освен ако не планирате да внедрите свой собствен resourceManager като заместител на този, включен във Flex, това вероятно няма значение. - person JeffryHouser; 18.07.2012