Bindableとsetterのoverrideの組合せではまった

StringValidatorを継承して、独自のValidatorを作成しようとしたときに、はまったメモ。
ソースイメージは以下。

[Bindable]
class MyStringValidator extends StringValidator {
  //...
  override public function set maxLength(value:Object):void {
    //以下が実行されない
    super.maxLength = value;
    // 他、dispatchEventなど
  }
}

デバッガでステップ実行すると、「override public function〜」の行まで来るが、それ以降が実行されない。

原因を調べたところ、以下のサイトを発見。

Setterは現在と同じ値を指定された場合は、呼び出しがスキップされて中身の処理が実行されない。

http://www.fores.jp/labs/wiki/index.php?%E7%AC%AC2%E5%9B%9EFlex%E5%8B%89%E5%BC%B7%E4%BC%9A

そこで、overrideしたsetterに[Bindable("unused")]をつけたところ、解決。

修正イメージ

  [Bindable("unused")]
  override public function set maxLength(value:Object):void {
    super.maxLength = value;
    // 他、dispatchEventなど
  }