5

MXMLで実行できるすべてのことをActionScriptでも実行でき、ActionScriptで多くのこと(ループ、条件など)を実行する方が簡単な場合、なぜMXMLの学習に時間をかけるのでしょうか。

この時点で私が持っている最大の理由は、MXMLの構造がUIコンポーネントの視覚的な階層とうまく一致していることと、UIを初期化するためのコード行が削減されていることです。一方、実際のUIは動的であることが多く、単純な静的構造として実装され、実行時の条件に基づいて動的に入力されます(この場合、UIの更新はActionScriptで行われます)。いくつかのヘルパーメソッドを作成することで、ActionScriptに必要なSLOCを減らすことも可能です。

4

4 に答える 4

14

アプリケーションのニーズにもよりますが、私は通常、デザインを視覚的なチャンクに分割し、カスタム MXML コンポーネントを使用して、mxml ベースのカスタム コンポーネントを使用して、アプリケーションのメイン領域とコンポーネント (データ パネル、ダイアログ ボックスなど) をレイアウトします。次に、組み込みのレイアウト コンポーネントよりも視覚的な柔軟性が必要なカスタム アクション スクリプト コンポーネントを追加します。MXML は、ステージ上でコンポーネントを取得し、それらのさまざまなプロパティとスタイル設定を非常に簡単に設定できるため便利です。

2 つの同一のログイン パネルの例を次に示します。

MXML の場合:

<mx:Panel xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="290" height="148" title="Login">
    <mx:Label text="User name:" width="80" textAlign="right" y="8" x="8"/>
    <mx:Label text="Password:" width="80" textAlign="right" y="38" x="8"/>
    <mx:TextInput id="txtUsername" maxChars="20" y="8" x="90"/>
    <mx:TextInput id="txtPassword" displayAsPassword="true" y="38" x="90" maxChars="20"/>
    <mx:Button x="185" y="68" label="Login" id="btnLogin" click="doLogin()"/>
</mx:Panel>

そしてアクションスクリプトで:

package
{
    import flash.events.MouseEvent;

    import mx.containers.Panel;
    import mx.controls.Button;
    import mx.controls.Label;
    import mx.controls.TextInput;

    public class MyLoginPanel extends Panel
    {

        private var _unLabel:Label;
        private var _passLabel:Label;
        private var _txtUsername:TextInput;
        private var _txtPassword:TextInput;
        private var _btnLogin:Button;

        public function MyLoginPanel()
        {
        }

        override protected function createChildren():void
        {
            super.createChildren();

            this.width = 290;
            this.height = 148;
            this.title = "Login";
            this.layout = "absolute";

            _unLabel = new Label();
            _unLabel.text = "User Name:";
            _unLabel.width = 80;
            _unLabel.setStyle("textAlign", "right");
            _unLabel.move(8, 8);
            this.addChild(_unLabel);

            _passLabel = new Label();
            _passLabel.text = "Password:";
            _passLabel.width = 80;
            _passLabel.setStyle("textAlign", "right");
            _passLabel.move(8, 38);
            this.addChild(_passLabel);

            _txtUsername = new TextInput();
            _txtUsername.move(90, 8);
            this.addChild(_txtUsername);

            _txtPassword = new TextInput();
            _txtPassword.move(90, 38);
            _txtPassword.displayAsPassword = true;
            this.addChild(_txtPassword);

            _btnLogin = new Button();
            _btnLogin.label = "Login";
            _btnLogin.move(185, 68);
            _btnLogin.addEventListener(MouseEvent.CLICK, doLogin);
            this.addChild(_btnLogin);
        }       
    }
}

7 行のコードと 62 行のコード。これは非常に単純な例ですが、Flex Builder でデザイン モードを使用しているかどうかに関係なく、アプリケーションの多くの部分を MXML でレイアウトすることでどのようなメリットがあるかを理解していただければ幸いです。

ただし、私がお勧めすることの 1 つは、actionscript を mxml ファイルからできるだけ除外することです。MXML をビューとして扱い、重い機能を他のクラスに分離します。次に、MXML コンポーネントのコントロールがバインドできるクラスにパブリック プロパティを提供できます。MXML はレイアウト言語であり、私の経験では、意味のある場所で使用し、より重い作業が必要な場合はいつでも actionscript にドロップすることで、最終的には利益が得られます。

于 2009-02-06T22:49:49.657 に答える
0

Flexフレームワークを使用する予定ですが、MXMLを使用するか、ASで動的に作業するかを選択していますか?その場合、MXMLの主な利点は、設計インターフェースとの統合です。WYSIWYGインターフェイスにアクセスする価値がない場合は、MXMLと純粋なASの間にほとんど違いがないことに気付くかもしれません。

MXMLの使用とFLAファイルの使用について質問している場合、それは非常に異なる質問ですが、「なぜFlexFrameworkを使用する必要があるのか​​」ということになります。

于 2008-11-05T02:42:01.317 に答える
0

mxmlとビジュアルデザイナを使用してUI要素を設計することは、コードよりもはるかに簡単であり、私の意見ではエラーが発生しにくくなっています。

UIが動的に変更される場合でも、多くの場合、これは事前定義されたUI要素をスワップインおよびスワップアウトすることを意味します。

于 2008-11-04T13:55:14.890 に答える
0

FlexBuilder を使用する場合、FlexBuilder はデザイン ビューで MXML を読み書きできるため、MXML はアプリケーションのレイアウトに役立ちます。また、MXML を介して状態を実装する方がはるかに簡単です。

デザイン ビューを備えた FlexBuilder などのツールを使用しないと、あまり役に立たない可能性があります。ただし、Flex4 は、MXML 表記を使用してベクター グラフィックスを作成する機能を含む新しい Thermo を導入する予定であり、MXML を使用して Flex コンポーネントのスキンを作成できるようにすることを忘れないでください。そのうち本領を発揮することになりそうです。MXML の使い方をすでに学んでいる場合は、その時点で有利になります。

于 2008-11-04T13:58:44.150 に答える