Flex, Swiz Framework: тег Mediate (EventListener) не работает с использованием строковой константы - PullRequest
1 голос
/ 19 сентября 2011

Я использую фреймворк Swiz с Flex. Я пытаюсь использовать тег mediate с некоторой удачей, вот моя проблема:

public class Locale {
    private static function onLoadSuccess(event:Event):void 
    {
        // I have a break point here.  I can tell that this code is being executed sucessfully
        Swiz.dispatchEvent(new DynamicEvent(ConfigConstants.LOCALE_RESOURSE_LOADED));
    }
}

В другом классе у меня есть этот код здесь:

public class AcordianPane {
    ...
    [Mediate( event="localeResourseLoaded")]
    public function onLocaleResourseLoaded( ...rest):void
    {
            this.label = Locale.getUiString("title.map.broadcast");
    }
    ...
}

Код выше работает как положено. Возникает проблема при изменении тега Mediate на константу:

public class AcordianPane {
        ...
        [Mediate( event=ConfigConstants.LOCALE_RESOURSE_LOADED)]
        public function onLocaleResourseLoaded( ...rest):void
        {
            // THIS IS NOT EXECUTED NOW!
            this.label = Locale.getUiString("title.map.broadcast");
        }
        ...
}

Кто-нибудь знает, почему это происходит? Для справки это мой класс ConfigConstants:

public class ConfigConstants {
    public static const LOCALE_RESOURSE_LOADED:String = "localeResourseLoaded";
}

Примечание. Тег Mediate идентичен тегу EventListener, имя которого было изменено несколько раз назад. Я знаю, что теперь это устарело, но я не думаю, что есть какая-либо причина найти и заменить в нашей базе кода.


Редактировать 1 : Я только что попытался заменить EventHandler на Mediate, но возникает та же проблема.


Редактировать 2 : Вот соответствующая документация с веб-страницы Swiz.


Редактировать 3 : Я также пытался поместить событие в цитаты (спасибо @ Герхарду), например:

[EventHandler( event="ConfigConstants.LOCALE_RESOURSE_LOADED")]
public function onLocaleResourseLoaded( ...rest):void
{
    this.label = Locale.getUiString("title.map.broadcast");
}

Но событие все еще не получено. Я думаю, что проблема может лежать в моем основном файле mxml, где я инициализирую Swiz:

<swiz:SwizConfig
    strict="true"                             // set by a co-worker
    mediateBubbledEvents="true"               // set by a co-worker
    viewPackages="com.sixtyfootersdude.views" // set by a co-worker
eventPackages="com.sixtyfootersdude.model" // <-- Just added!  
    beanLoaders="{ [ com.sixtyfootersdude.admin.AdminBeans ] }" /> // set by a co-worker

Также обратите внимание, что

  • AcordianPane находится в com.sixtyfootersdude.views
  • Locale находится в com.foxtrot.util
  • ConfigConstants находится в com.sixtyfootersdude.model

Редактировать 4 : Последнее, что я попробовал, это:

[EventHandler( event="com.sixtyfootersdude.model.ConfigConstants.LOCALE_RESOURSE_LOADED")]
public function onLocaleResourseLoaded( ...rest):void{
    this.label = Locale.getUiString("title.map.broadcast");
}

И

<swiz:SwizConfig
    strict="true"
    mediateBubbledEvents="true"
    viewPackages="com.sixtyfootersdude.views"
    beanLoaders="{ [ com.sixtyfootersdude.admin.AdminBeans ] }" />

1 Ответ

1 голос
/ 19 сентября 2011

Нельзя использовать константы в метатегах.К сожалению, это ограничение Flex.Вместо этого вы должны использовать имена констант в качестве строк.Однако Swiz проверит, существуют ли эти константы во время инициализации.Поэтому при запуске приложения вы получите ошибку, если вы неправильно настроили [EventHandler].

. Итак, в вашем случае решение будет выглядеть так:

[EventHandler(event = "ConfigConstants.LOCALE_RESOURSE_LOADED")]
public function onLocaleResourseLoaded():void
{
}

Убедитесь, чтопакет ConfigConstants настроен как eventPackage в вашем SwizConfig.

Для получения дополнительной информации посмотрите Обработка событий с использованием имен классов и констант и Swiz Configuration .

Кстати: вам больше не следует использовать устаревший [Mediate].

...