2

我有一个大问题来绑定这个方法:

[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')}"/>

有人知道问题是什么吗?

注意:我读了这篇文章,我认为这是同样的问题,但由于任何原因它对我不起作用:

4

2 回答 2

0

问题出在这里:[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));
}

现在这被过度简化了,但你希望能明白这一点。至于为什么它在与 DataGrid 相同的 mxml 中工作,我只能推测您调度的事件不是定义的事件类,而是上面类似的东西 - 只是一个定义的字符串?很难说。

于 2012-11-30T03:03:15.947 回答
0

最后我发现发生了什么(并理解迈克的意思)

问题首先是:

这个不能用:

[Bindable(event=LOCALE_CHANGED_EVENT_TYPE)]

它应该是:

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

第二次失败:

该方法不应该是静态的,因为如果它是静态的,它只会在启动时工作一次。

谢谢你的回答:)

于 2013-01-03T13:27:50.663 回答