Adobe Flex 3 ヘルプ

ActionScript でのデータバインディングの定義

mx.binding.utils.BindingUtils クラスを使用すると、ActionScript でデータバインディングを定義できます。このクラスでは静的メソッドが定義されています。bindProperty() メソッドを使用すると、変数として実装されているプロパティへのデータバインディングを作成できます。または、bindSetter() メソッドを使用して、メソッドへのデータバインディングを作成できます。bindProperty() メソッドの使用例については、データバインディングの例を参照してください。

MXML でのデータバインディングと ActionScript でのデータバインディングの相違点

MXML でのコンパイル時データバインディングの定義と、ActionScrip での実行時データバインディングの定義には、いくつかの相違点があります。

  • bindProperty() メソッドまたは bindSetter() メソッドで定義されるデータバインディング式に ActionScript コードを含めることはできません。その代わりに、bindSetter() メソッドを使用して、バインディングの発生時に呼び出すメソッドを指定します。
  • ActionScript で定義されるデータバインディング式に E4X 式を含めることはできません。
  • bindProperty() メソッドまたは bindSetter() メソッドで定義されるデータバインディング式のプロパティチェーンに、関数または配列エレメントを含めることはできません。これらのプロパティチェーンについて詳しくは、バインド可能プロパティチェーンの使用を参照してください。
  • MXML コンパイラでは、bindProperty() メソッドまたは bindSetter() メソッドによって定義される実行時データバインディングより優れた警告およびエラー検出がサポートされています。

例:ActionScript でのデータバインディングの定義

次の例では、bindSetter() メソッドを使用してデータバインディングを設定しています。bindSetter() メソッドには、次の引数を指定できます。

  • ソースオブジェクト
  • ソースプロパティの名前
  • ソースプロパティが変更されたときに呼び出されるメソッド

次の例では、TextInput コントロールにテキストを入力すると、テキストが TextArea コントロールにコピーされるときに大文字に変換されます。

<?xml version="1.0"?>
<!-- binding/BindSetterAS.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">

    <mx:Script>
        <![CDATA[

            import mx.binding.utils.*;
            import mx.events.FlexEvent;

            // Method called when myTI.text changes.
            public function updateMyString(val:String):void {
                myTA.text = val.toUpperCase();
            }

            <!-- Event listener to configure binding. -->
            public function mySetterBinding(event:FlexEvent):void {
                var watcherSetter:ChangeWatcher = 
                    BindingUtils.bindSetter(updateMyString, myTI, "text");
            }
        ]]>
    </mx:Script>

    <mx:Label text="Bind Setter using setter method"/>
    <mx:TextInput id="myTI" 
        text="Hello Setter" />
    <mx:TextArea id="myTA" 
        initialize="mySetterBinding(event);"/>
</mx:Application>

前の例で実行する SWF ファイルは以下のとおりです。

バインディング Watcher の定義

Flex に組み込まれている mx.binding.utils.ChangeWatcher クラスを使用すると、データバインディング Watcher を定義できます。通常、バインディングが発生すると、データバインディング Watcher からイベントリスナーが呼び出されます。データバインディング Watcher を設定するには、次の例のように ChangeWatcher クラスの静的メソッド watch() を使用します。

<?xml version="1.0"?>
<!-- binding/DetectWatcher.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 
    initialize="initWatcher();">

    <mx:Script>
        <![CDATA[
          import mx.binding.utils.*;
          import mx.events.FlexEvent;
          import mx.events.PropertyChangeEvent;

          public var myWatcher:ChangeWatcher;

          // Define binding watcher. 
          public function initWatcher():void {
            // Define a watcher for the text binding.
            ChangeWatcher.watch(textarea, "text", watcherListener);
          }

          // Event listener when binding occurs. 
          public function watcherListener(event:Event):void {
            myTA1.text="binding occurred";
                
            // Use myWatcher.unwatch() to remove the watcher.
          }
        ]]>
    </mx:Script>

    <!-- Define a binding expression to watch. -->
    <mx:TextInput id="textinput" text="Hello"/>
    <mx:TextArea id="textarea" text="{textinput.text}"/>

    <!-- Trigger a binding. -->
    <mx:Button label="Submit" click="textinput.text='Goodbye';"/>
    <mx:TextArea id="myTA1"/>
</mx:Application>

前の例で実行する SWF ファイルは以下のとおりです。

データバインディング Watcher のイベントリスナーを 1 つ定義し、イベントリスナーはイベントオブジェクトを格納する引数を 1 つ受け取ります。イベントオブジェクトのデータ型は、監視対象のプロパティによって決まります。バインド可能プロパティからはそれぞれ、異なるイベントタイプと関連するイベントオブジェクトを送出できます。イベントタイプの特定について詳しくは、Bindable メタデータタグの使用を参照してください。

バインド可能プロパティによって送出されたデフォルトのデータ型であるため、多くのイベントリスナーが PropertyChangeEvent 型のイベントオブジェクトを受け取ります。すべての Flex イベントの基本クラスであるイベントタイプ flash.events.Event は、常に指定できます。

 

このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート