UIComponent - Adobe ActionScript® 3(AS3 Flex)API リファレンス
mx のコンテナは、executeBindings を override しているので、下位コントロールまで伝播するんだけど、
Container - Adobe ActionScript® 3(AS3 Flex)API リファレンス
spark のコンテナ(Group - Adobe ActionScript® 3(AS3 Flex)API リファレンス) は、executeBindings を override していないので、下位コントロールに伝播しません。
困った。。
例:
_source の件数によってボタンの使用可否を Binding で変更したい。
<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx"> <s:layout> <s:VerticalLayout /> </s:layout> <fx:Script> <![CDATA[ private var _source:Array = []; [Bindable] private function set canClick(value:Boolean):void {} private function get canClick():Boolean { return _source.length != 0; } private function refresh():void { sparkContainer.executeBindings(true); mxContainer.executeBindings(true); } ]]> </fx:Script> <s:Group id="sparkContainer"> <s:Button content="SparkContainerButton" enabled="{canClick}" /> </s:Group> <mx:Box id="mxContainer"> <s:Button content="MXContainerButton" enabled="{canClick}" /> </mx:Box> <s:Button content="Enable" click="_source = [1]; refresh();" /> <s:Button content="Disable" click="_source = []; refresh();" /> </s:Application>
Flex の Binding は、setter 経由で値を変更しろって事なんかな。