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など }