1

Flex でカスタム レイアウトを作成する場合、通常は LayoutBase をオーバーライドします。この場合、インターネット上のドキュメントやチュートリアルでは、関数updateDisplayList()measure(). . 。は?

AS3 には、関数をオーバーライドすることを構文的に要求する構造はないと思います。未処理のエラーなどを発生させる特別なロジックはありません。これは完全にうまくいきます:

<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns="*" backgroundColor="#000000" showStatusBar="false" click="createImage()">
    <fx:Script>
        <![CDATA[
            import spark.components.Image;

            [Embed(source="AL.png")]
            private static const IMAGE:Class;

            private var iX:int = 0;
            private var iY:int = 0;

            private function createImage():void
            {
                var img:Image = new Image();
                img.source = IMAGE;
                img.width = 100;
                img.height = 100;

                img.x = iX
                img.y = iY;

                iX += 100;
                iY += 100;

                grp.addElement(img);
            }
        ]]>
    </fx:Script>
    <s:Group id="grp" width="400" height="400">
        <s:layout>
            <GridLayout/>
        </s:layout>
    </s:Group>
</s:WindowedApplication>

そして私の GridLayout.as クラスで:

package
{
    import spark.layouts.supportClasses.LayoutBase;

    public class GridLayout extends LayoutBase
    {
    }
}

アプリケーションをクリックするたびに、(x, y) * n の位置に新しい画像が生成されます。ここで、n は以前に生成された画像の数です。それは完全にうまく機能します。右クリックで既存の画像を取得して画面上で移動できるようにコードを追加したところ、それもうまくいきました。

だから私は私の質問だと思います。. .なぜ彼らはこれが絶対に必要だと言っているのですか? 彼らはどういう意味ですか?これらの 2 つの関数は、カスタマイズを集中させたい場所などのドキュメントや内容を理解できますが、プログラミングでは、関数のオーバーライドが必要であると言うのはかなり強力な言語です。これらの関数をオーバーライドしなくても問題なく機能する場合、ドキュメントと独立したチュートリアルの両方がこれを言っているのはなぜですか? ありがとう!

4

2 に答える 2

2
 Why in the world are they saying this is absolutely required?

コンポーネントが最適に機能するには、これらのオーバーライド関数が必要です。アプリケーションが小さく、コンポーネントが頻繁に変更されず、他のボディがクラスに影響を与えない場合、これらのコンポーネントはこれらのコンポーネント ライフサイクルの原則に従う必要はありません。

ただし、アプリでこれらのコンポーネントを頻繁に変更する必要がある場合は、これらのライフサイクルの原則を適用している可能性があります。

例:コーラを準備したい場合、ステップ(ライフサイクルと言います)は、水を取る>砂糖を混ぜる>色を追加する>ソーダを混ぜる>ボトルに入れる

先ほど用意したコーラの色を変えてほしいという注文が来て、もうライフサイクルは終わっているので、ここで何かを変える必要があるとすれば、色を変えるだけでも大変な労力が必要になります。ライフサイクルに従っていれば、実行時のアプリの作業が楽になります。パフォーマンスの問題はありません。

于 2013-10-03T21:03:09.207 に答える
2

なぜ彼らはこれが絶対に必要だと言っているのですか?

あなたが読んでいるドキュメントがわからないので。言うのは難しいです。ドキュメントが間違っている可能性があります。または、コンテキストから何かを取り出している可能性があります。updateDisplayList() または measure() メソッドで何らかのコードを記述する必要はありませんが、...

彼らはどういう意味ですか?

Flex コンポーネントの作成のコンテキストで。MX コンポーネントまたはSpark コンポーネントのいずれかに対して、Flex コンポーネントの LifeCycle メソッドを使用することは理にかなっています。ライフサイクル メソッド (createChildren()、commitProperties()、updateDisplayList()、および measure() は、Flex フレームワークによって実行され、フレームワークに組み込まれた無効化サイクルを利用します。

フレームワーク メソッドは、「類似の」コードを同じ場所に配置するのに役立ちます。

Spark フレームワークは、レイアウトとサイズ変更コード (別名 updateDisplayList() と measure()) をメイン クラスから特定のレイアウト クラスに分離するオプションを提供することで、状況を少し変更しました。

関数のオーバーロードが必要であると言うのは、かなり強力な言語です

オーバーロードが必要であると書かれているドキュメントを読んだことがあれば、私は驚かれることでしょう。オーバーロードとは、同じ名前で引数が異なる複数の関数を作成する行為です。これは ActionScript ではサポートされていません。 オーバーライドとは、関数の機能を変更または拡張するために、子コンポーネント内の関数を拡張する行為です。それらは異なる概念です。それがあなたのタイプミスだったのか、それともオブジェクト指向プログラミングのいくつかのテナントについて混乱していたのかはわかりません。

これは役に立ちますか?[残念ながら、Flex Framework の規則を適切に使用するためにサンプルを作り直す時間がありません。

于 2013-10-03T20:53:04.770 に答える