0

addeventlistenerの略記である以外に、バインディングのポイントを本当に理解したことはありません。

それ以上のものはありますか?私は何かが足りないのですか?

ありがとう、dsdsdsdsd

4

2 に答える 2

4

Flex 4でのデータバインディングは、addEventListener()のショートカットとして説明されていると思いますが、これは、車が単なる歩行のショートカットであると言っているようなものです。ブロックを回避するだけの場合は大したことではありませんが、多数のアイテムレンダラーと、すぐに変更される可能性のある多数のデータポイントを含む複雑なアプリケーションを構築している場合、データバインディングを使用すると、何百ものaddEventListenerを記述しないようにすることができます。 ()とremoveEventListener()の呼び出し、およびそれらに関連するハンドラー。その文脈では、それは一種の本当に大きな問題です。

于 2011-05-10T00:08:53.333 に答える
4

データバインディングとは、UIでのデータの表示方法を宣言的に定義することです。addEventListener内部的には、データバインディングの機能をサポートするため にフックするだけではなく、より多くのニーズがあるため、少し複雑です。

これは実際には非常に強力な機能であり、さらに理解するために、単純な「HelloWorld」アプリケーションを見ることができます。

<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark">
    <s:HGroup>
        <s:TextInput id="input" />
        <s:Label text="Hello {input.text}" />
    </s:HGroup>

</s:Application>

次に、コンパイラフラグを使用してこのアプリをコンパイル--keepし、新しいフォルダ「bin-debug/generated」を確認します。HelloWorld-generated.asに興味があります

ここで、そのバインディングが定義され、コンストラクターから呼び出されます。

private function _HelloWorld_bindingsSetup():Array
{
    var result:Array = [];

    result[0] = new mx.binding.Binding(this,
        function():String
        {
            var result:* = "Hello " + (input.text);
            return (result == undefined ? null : String(result));
        },
        null,
        "_HelloWorld_Label1.text"
        );


    return result;
}

少し後、HelloWorldコンストラクターで、ウォッチャーをセットアップするための呼び出しを受け取ります。

        _watcherSetupUtil.setup(this,
                function(propertyName:String):* { return target[propertyName]; },
                function(propertyName:String):* { return HelloWorld[propertyName]; },
                bindings,
                watchers);

これは本当にこれを行うだけです:

watchers[0] = new mx.binding.PropertyWatcher("input", 
                                            { propertyChange: true }, 
                                            [ bindings[0] ] , 
                                            propertyGetter );
watchers[1] = new mx.binding.PropertyWatcher("text",
                                             { change: true,
                                               textChanged: true },
                                             [ bindings[0] ],
                                             null);

双方向バインディングを使用すると、事態はさらに複雑になります。

于 2011-05-10T00:12:41.063 に答える