Flex 4 DataGridColumn: привязка функции к заголовку не работает

у меня большая проблема с привязкой этого метода:

[Bindable(event=LOCALE_CHANGED_EVENT_TYPE)]
public static function localeString(pathInLocale:String):String
{
    var value:String=LocaleUtil.getValueFromLocaleFromStringPath(pathInLocale);
    if (value == null || value.length == 0)
    {
        value=pathInLocale;
    }
    trace(value);
    return value;
}

нравится:

<mx:DataGridColumn headerText="{PDMPlusPlusModelLocator.localeString('employeeView.employeeFilter.noDottedManager')}" />

Стыковые швы просто не выполняются. (Подумайте об этом, потому что trace() не вызывается, и я его отладил)

Но то же самое отлично работает здесь:

<mx:Label text="{PDMPlusPlusModelLocator.localeString('employeeView.employeeFilter.noDottedManager')}"/>

Кто-нибудь знает, в чем проблема?

Примечание. Я прочитал этот пост и думаю, что это та же проблема, но это не так. работать на меня по каким-либо причинам:


person Devian88    schedule 28.11.2012    source источник
comment
Я немного пытаюсь, и привязка работает, если я привязываю метод, который находится в том же mxml, что и DataGrid. Но это не то, чего я хочу. Я хочу иметь общую функцию localeString и не писать ее для каждого mxml :(   -  person Devian88    schedule 28.11.2012


Ответы (2)


Проблема заключается здесь: [Bindable(event=LOCALE_CHANGED_EVENT_TYPE)]

Это правило препроцессора, которое еще не выполнило разрешение своих ссылок. Фактически то, что делает [Bindable], заключается в том, чтобы написать для вас прослушиватель событий (через ChangeWatcher в другом месте), и, поскольку они основаны на «магических строках», ваш оператор должен выглядеть примерно так:

public static const LOCALE_CHANGED_EVENT:String = "localeChangedEvent";

[Bindable(event="localeChangedEvent")]
function foo(param:int):void
{
  var oldValue:int = _fooFighters;
  _fooFighters = param;
  if (oldValue != param) dispatch(new Event(LOCALE_CHANGED_EVENT));
}

Теперь это слишком упрощено, но вы, надеюсь, можете понять идею. Что касается того, почему он работает в том же mxml, что и DataGrid, я могу только предположить, что ваше отправленное событие не является определенным классом событий, а чем-то похожим выше - просто определенной строкой? Тяжело сказать.

person Mike Petty    schedule 30.11.2012
comment
Привет, Майк, сначала скажем: Спасибо за ответ. Я думаю, вы неправильно поняли, что я хочу сделать. Я не хочу писать только функцию получения. Функция localeString() должна возвращать найденную строку локали (например, для пути foo.bar она должна возвращать Hello World) или, если для пути не найдена строка, она должна возвращать строку пути (например, foo. bar) Сама функция прекрасно работает. Теперь я хочу связать эту функцию. Поскольку строка пути исправлена, я не могу связать ее самостоятельно. - person Devian88; 03.12.2012

Наконец-то я узнал, что происходит (и понял, что имел в виду Майк)

Проблема первая:

Это нельзя использовать:

[Bindable(event=LOCALE_CHANGED_EVENT_TYPE)]

Должен быть:

[Bindable(event="foo.bar.LocaleChanged")]

И второй терпит неудачу:

метод не должен быть статичным, потому что он срабатывает только один раз при запуске, если он статичен.

Спасибо за ответы :)

person Devian88    schedule 03.01.2013