“unable to bind to property”


ちょっとした、小ネタ。
Flexで、mxml上でbindさせてると、warning: unable to bind to property 'label1' on class 'Object' (class is not an IEventDispatcher)
ってなワーニングに出くわしたことがある人もいると思います。

以下のようなmxmlを記述して実行してみると、このワーニングがトレースされます。

labelObject2の方は、[Bindable]記述がない時点で、コンパイル時にワーニングがデルと思います。
objectの方は実行時に、warning: unable to bind to property 'label' on class 'Object' (class is not an IEventDispatcher)というような、ワーニングがトレースされると思います。
このワーニング、見た目上は動いているように見えます。ただ、これが、大きなフォームで大量のテキストボックスに対してバインディングしてる場合には、大量のトレース文が出力されてしまいます。トレース文が大量に出力されるとパフォーマンス的にはよくないんですね。

Objectに対して[Bindable]記述をしても有効ではありません。これを解決するには、クラスを作ってプロパティを定義するという方法もあるんですが、クラスを作れないケースもありえると思います。この場合は、ObjectProxyを使うとバインディング可能になります。
以下のように、ソースを書き換えると、実行時のワーニングがトレースに出力されなくなります。

ObjectProxyでカプセル化したオブジェクトをバインディングさせる事で、正常に動作するようになります。どうしても、クラス化出来ない場合は、これでオブジェクトをバインディングさせて使いましょう。

ツイートツイート

  1. コメントはありません
(公開されません)

  1. トラックバックがありません。