Почему я должен использовать MXML? - PullRequest
5 голосов
/ 04 ноября 2008

Если все, что может быть выполнено в MXML , можно также выполнить в ActionScript, и многие вещи проще выполнить в ActionScript (циклы, условные выражения и т. Д.), Зачем тратить время на изучение MXML?

Наилучшие причины, которые у меня есть на данный момент, в том, что структура MXML хорошо соответствует визуальной иерархии компонентов пользовательского интерфейса и что строки кода для инициализации пользовательского интерфейса сокращены. С другой стороны, реальные пользовательские интерфейсы часто являются динамическими, реализуются в виде простой статической структуры и затем заполняются динамически в зависимости от условий выполнения (в любом случае обновления пользовательского интерфейса в любом случае выполняются в ActionScript). Также было бы возможно уменьшить SLOC , необходимый для ActionScript, с помощью нескольких вспомогательных методов.

Ответы [ 4 ]

14 голосов
/ 07 февраля 2009

Это зависит от потребностей вашего приложения, но я обычно делю свой дизайн на визуальные фрагменты и использую пользовательские компоненты MXML, чтобы разметить основные области и компоненты моего приложения (панели данных, диалоговые окна и т. Д.) С использованием пользовательских компонентов на основе mxml. Затем я дополню это с помощью пользовательских компонентов ActionScript, где мне нужно больше гибкости, чем обеспечивают встроенные компоненты макета. MXML удобен тем, что позволяет очень легко выводить компоненты на сцену и устанавливать их различные свойства и настройки стиля.

Возьмите этот пример двух идентичных панелей входа в систему:

В 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>

И в ActionScript:

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);
        }       
    }
}

Семь строк кода против 62. Это довольно простой пример, но, надеюсь, вы сможете увидеть, какую выгоду вы можете получить, выложив множество частей своего приложения в MXML, независимо от того, используете ли вы режим разработки в Flex Builder или нет.

Тем не менее, я рекомендую не допускать actionScript в ваших файлах mxml. Относитесь к MXML как к своему представлению и разделяйте любую тяжелую функциональность на другие классы. Затем вы можете предоставить общие свойства в тех классах, к которым могут привязываться элементы управления в ваших компонентах MXML. MXML - это язык разметки, и, по моему опыту, в конечном итоге стоит использовать его там, где это имеет смысл, и переходить в ActionScript всякий раз, когда требуется более тяжелая работа.

0 голосов
/ 04 ноября 2008

Если вы используете FlexBuilder, то MXML полезен для разметки приложения, поскольку FlexBuilder может читать / записывать MXML в режиме конструктора. Также гораздо проще реализовать состояния через MXML.

Если вы не используете такой инструмент, как FlexBuilder, имеющий конструкторское представление, то он может оказаться менее полезным. Однако помните, что Flex4 должен представить новый материал Thermo, который включает в себя возможность создавать векторную графику с использованием нотации MXML и позволит использовать MXML для создания оболочки компонентов Flex. Это, вероятно, вступит в свои права тогда. В этот момент у вас будет преимущество, если вы уже освоили MXML.

0 голосов
/ 05 ноября 2008

Вы говорите, что собираетесь использовать среду Flex, но выбираете, использовать ли MXML или работать динамически в AS? Если это так, то главным преимуществом MXML является интеграция с интерфейсом дизайна. Если вам не нужен доступ к интерфейсу WYSIWYG, вы можете обнаружить, что между MXML и чистым AS есть небольшая разница.

Если вы спрашиваете об использовании MXML по сравнению с использованием FLA-файлов, тогда это совсем другой вопрос - он означает «зачем мне использовать Flex Framework?»

0 голосов
/ 04 ноября 2008

Разработка элементов пользовательского интерфейса с помощью mxml и визуального конструктора намного проще, чем в коде, и, на мой взгляд, менее подвержена ошибкам.

Даже если пользовательский интерфейс изменяется динамически, часто это означает переключение предопределенных элементов пользовательского интерфейса внутрь и наружу.

...