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")]

そして2番目は失敗します:

メソッドは静的であってはなりません。静的な場合、起動時に1回しか機能しないためです。

あなたのためのThxは答えます:)

于 2013-01-03T13:27:50.663 に答える