Flex 4 DataGrid列:函数绑定到标题文本不起作用

时间:2012-11-28 10:10:03

标签: flex datagridcolumn headertext

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

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

Binding接缝根本没有被执行。 (想一想,因为没有调用trace()并且我已经对其进行了调整)

但同样的作品在这里很完美:

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

任何人都知道问题是什么?

注意:我real this post我觉得这是同样的问题,但是由于任何原因它对我不起作用:

2 个答案:

答案 0 :(得分: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中工作,我只能推测你的调度事件不是一个定义的事件类,而是上面类似的 - 只是一个定义的字符串?很难说。

答案 1 :(得分:0)

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

问题首先出现:

不能使用:

[Bindable(event=LOCALE_CHANGED_EVENT_TYPE)]

应该是:

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

而且声音失败了:

该方法不是静态的,因为它只在启动时才起作用,如果它是静态的。

谢谢你答案:)