12

私が理解している限り、ActionScript の var へのバインドは、var が変更されたときに自動的に発生するイベントを介して実行されます。これについていくつか質問があります。

  1. クラスが EventDispatcher を明示的に拡張しない場合はどうなりますか? 本質的にクラスを EventDispatcher にするコンパイラで行われるある種の魔法はありますか?
  2. 静的変数へのバインドはどのように機能しますか? ある種の暗黙的な static addEventListener() 関数がクラスに追加されていますか?
  3. [Bindable] を静的変数に配置できるが、静的関数には配置できないことに気付きました。これはなぜですか?

編集:

Christophe Herreman の明快な回答に感謝します。ただし、上記の質問からいくつかのフォローオンがあります。誰かが私のためにギャップを埋めることができるのだろうか.

  1. -keep オプションをコンパイラに追加し、生成されたバインディング コードを確認しました。このコードの適用方法を説明できる人はいますか? コンパイラは、ゲッターとセッターを含むクラスごとに BindableProperty というクラスを生成するようです。これは、私が書いたクラスにどのように組み込まれますか? この機能は C# の部分クラスのようなものです。これはもっぱら舞台裏のコンパイラ機能ですか、それとも自分で使用できるものですか?

  2. BindableProperty クラスはまだ EventDispatcher を明示的に実装していません。生成されたクラスはどのようにイベント ディスパッチを実装しますか?

  3. 質問 3 で、静的関数へのバインドについて質問しましたが、実際には静的な getter および setter 関数を意味していました。これは許可されていないようです。

4

1 に答える 1

14

実際、バインディングはイベント ディスパッチを介して機能します。-keep フラグをコンパイラ設定に追加すると、生成された Actionscript コードから多くのことを学ぶことができます。

私はあなたの質問に答えようとします。

  1. コンパイラは [Bindable] メタデータ タグを取得し、バインド可能としてマークした各プロパティのゲッターとセッターを作成します。ゲッターはプロパティの値を返すだけです。セッターは、新しい値が元の値と異なるかどうかを確認し、異なる場合は PropertyChange イベントを送出します。

  2. 基本的にインスタンス プロパティと同じですが、静的ゲッターとセッターが作成されるだけです。さらに、静的プロパティの変更を監視するために mx.binding.StaticPropertyWatcher が作成されます。

  3. 静的メソッドにバインドすると、次の警告が表示されます。説明はほとんどそれをすべて言います。このメソッド専用にトリガーされる「propertyChange」イベントがないため、カスタム イベントを自分でディスパッチする必要があります。それは [Bindable(event="customEvent")] であり、クラスのどこかからそのイベントをディスパッチします。

于 2008-11-26T19:11:29.433 に答える