Как использовать это в качестве кода класса в приложении mmxl? - PullRequest
0 голосов
/ 09 мая 2011

Я взял этот код у одного из моих друзей, но на самом деле он совершенно беспорядочный, я получаю много ошибок при запуске этого кода, у меня есть вопрос

  1. Как я могу использовать этот код в приложении mxml, так как мы знаем, что мы не можем использовать открытый класс в скрипте mx, и как это сделать
  2. Как вы можете видеть .mx_internal, я получаю сообщение об ошибке, говоря «определите объект перед точкой», когда я удаляю mx_internal и пытался использовать import mx.binding.mx_internal и использовать пространство имен приложения mx_internal, ничего не отображая

теперь вы скажете мне, что есть простые методы для решения проблемы, но весь мой проект только на этом методе

спасибо за помощь заранее я пытаюсь решить эту проблему в последние 15 дней, но безуспешно, пожалуйста, помогите мне ниже код

package components
{
    import flash.events.*;
    import flash.utils.*;
    import mx.binding.*;
    import mx.containers.*;
    import mx.controls.*;
    import mx.core.*;
    import mx.events.*;
    import mx.styles.*;

    public class DialogTitle extends HBox implements IBindingClient
    {
        private var _110371416title:String = "Dialog Title";
        public var _DialogTitle_Image1:Image;
        public var _DialogTitle_Image2:Image;
        public var _DialogTitle_Label1:Label;
        var _bindingsBeginWithWord:Object;
        private var _1859425293showCloseButton:Boolean = false;
        var _bindingsByDestination:Object;
        var _watchers:Array;
        var _bindings:Array;
        private var _documentDescriptor_:UIComponentDescriptor;
        private static var _watcherSetupUtil:IWatcherSetupUtil;

        public function DialogTitle()
        {
            _documentDescriptor_ = new UIComponentDescriptor({type:HBox, propertiesFactory:function () : Object
            {
                return {height:27, childDescriptors:[new UIComponentDescriptor({type:Spacer, propertiesFactory:function () : Object
                {
                    return {width:5};
                }// end function
                }), new UIComponentDescriptor({type:Image, id:"_DialogTitle_Image1"}), new UIComponentDescriptor({type:Spacer, propertiesFactory:function () : Object
                {
                    return {width:5};
                }// end function
                }), new UIComponentDescriptor({type:Label, id:"_DialogTitle_Label1", stylesFactory:function () : void
                {
                    this.fontSize = 14;
                    this.color = 16777215;
                    this.fontWeight = "bold";
                    return;
                }// end function
                }), new UIComponentDescriptor({type:Spacer, propertiesFactory:function () : Object
                {
                    return {percentWidth:100};
                }// end function
                }), new UIComponentDescriptor({type:Image, id:"_DialogTitle_Image2", events:{click:"___DialogTitle_Image2_click"}, propertiesFactory:function () : Object
                {
                    return {useHandCursor:true, buttonMode:true, mouseChildren:false, toolTip:"Close"};
                }// end function
                }), new UIComponentDescriptor({type:Spacer, propertiesFactory:function () : Object
                {
                    return {width:13};
                }// end function
                })]};
            }// end function
            });
            _bindings = [];
            _watchers = [];
            _bindingsByDestination = {};
            _bindingsBeginWithWord = {};
            mx_internal::_document = this;
            if (!this.styleDeclaration)
            {
                this.styleDeclaration = new CSSStyleDeclaration();
            }
            this.styleDeclaration.defaultFactory = function () : void
            {
                this.backgroundColor = 9947478;
                this.horizontalGap = 0;
                this.verticalAlign = "middle";
                this.verticalGap = 0;
                return;
            }// end function
            ;
            this.height = 27;
            this.percentWidth = 100;
            return;
        }// end function

        private function _DialogTitle_bindingExprs() : void
        {
            var _loc_1:* = undefined;
            _loc_1 = CustomEmbeddedAssets.logoImageSmall;
            _loc_1 = title;
            _loc_1 = EmbeddedAssets.dialogClose;
            _loc_1 = showCloseButton;
            return;
        }// end function

        public function get showCloseButton() : Boolean
        {
            return this._1859425293showCloseButton;
        }// end function

        override public function initialize() : void
        {
            var target:DialogTitle;
            var watcherSetupUtilClass:Object;
            .mx_internal::setDocumentDescriptor(_documentDescriptor_);
            var bindings:* = _DialogTitle_bindingsSetup();
            var watchers:Array;
            target;
            if (_watcherSetupUtil == null)
            {
                watcherSetupUtilClass = getDefinitionByName("_components_DialogTitleWatcherSetupUtil");
                var _loc_2:* = watcherSetupUtilClass;
                _loc_2.watcherSetupUtilClass["init"](null);
            }
            _watcherSetupUtil.setup(this, function (param1:String)
            {
                return target[param1];
            }// end function
            , bindings, watchers);
            var i:uint;
            while (i < bindings.length)
            {

                Binding(bindings[i]).execute();
                i = (i + 1);
            }
            mx_internal::_bindings = mx_internal::_bindings.concat(bindings);
            mx_internal::_watchers = mx_internal::_watchers.concat(watchers);
            super.initialize();
            return;
        }// end function

        public function get title() : String
        {
            return this._110371416title;
        }// end function

        private function _DialogTitle_bindingsSetup() : Array
        {
            var binding:Binding;
            var result:Array;
            binding = new Binding(this, function () : Object
            {
                return CustomEmbeddedAssets.logoImageSmall;
            }// end function
            , function (param1:Object) : void
            {
                _DialogTitle_Image1.source = param1;
                return;
            }// end function
            , "_DialogTitle_Image1.source");
            result[0] = binding;
            binding = new Binding(this, function () : String
            {
                var _loc_1:* = title;
                var _loc_2:* = _loc_1 == undefined ? (null) : (String(_loc_1));
                return _loc_2;
            }// end function
            , function (param1:String) : void
            {
                _DialogTitle_Label1.text = param1;
                return;
            }// end function
            , "_DialogTitle_Label1.text");
            result[1] = binding;
            binding = new Binding(this, function () : Object
            {
                return EmbeddedAssets.dialogClose;
            }// end function
            , function (param1:Object) : void
            {
                _DialogTitle_Image2.source = param1;
                return;
            }// end function
            , "_DialogTitle_Image2.source");
            result[2] = binding;
            binding = new Binding(this, function () : Boolean
            {
                return showCloseButton;
            }// end function
            , function (param1:Boolean) : void
            {
                _DialogTitle_Image2.visible = param1;
                return;
            }// end function
            , "_DialogTitle_Image2.visible");
            result[3] = binding;
            return result;
        }// end function

        public function set showCloseButton(param1:Boolean) : void
        {
            var _loc_2:* = this._1859425293showCloseButton;
            if (_loc_2 !== param1)
            {
                this._1859425293showCloseButton = param1;
                this.dispatchEvent(PropertyChangeEvent.createUpdateEvent(this, "showCloseButton", _loc_2, param1));
            }
            return;
        }// end function

        public function ___DialogTitle_Image2_click(event:MouseEvent) : void
        {
            dispatchEvent(new Event("onCancel"));
            parent.visible = false;
            return;
        }// end function

        public function set title(param1:String) : void
        {
            var _loc_2:* = this._110371416title;
            if (_loc_2 !== param1)
            {
                this._110371416title = param1;
                this.dispatchEvent(PropertyChangeEvent.createUpdateEvent(this, "title", _loc_2, param1));
            }
            return;
        }// end function

        public static function set watcherSetupUtil(param1:IWatcherSetupUtil) : void
        {
            DialogTitle._watcherSetupUtil = param1;
            return;
        }// end function

    }
}

Ответы [ 2 ]

1 голос
/ 09 мая 2011

Просто выбросьте этот код.Этот код был сгенерирован автоматически компилятором mxmlc из класса MXML и не может быть использован в производстве.Это для компьютера, а не для людей.Напишите правильный код самостоятельно.Я надеюсь, что это будет яснее и ремонтопригоднее.И да, этот код не был написан вашим другом:)

0 голосов
/ 13 апреля 2015

Этот файл декомпилирован из файла .mxml, в котором используются теги для описания макета.Однако какой-то декомпилятор не может полностью преобразовать его, и вы увидите файл, подобный этому.

Как видите, аргумент UIComponentDescriptor - это объект, который содержит много пар ключ-валь.Он имеет некоторые типы ключей:

  1. type: Class -> это тип этого компонента, который является тегом узла файла .mxml
  2. id: String -> это идентификатор узла, который также является именем переменной, которое вы можете использовать в <fx:Script> tag
  3. event: Object -> события, которые компонент будет вызывать
  4. stylesFactory: Функция -> установка стилей компонента
  5. propertiesFactory: Функция -> содержит некоторые свойства и дочерние узлы

код, подобный этому:

<mx:Canvas id="mainCanvas" borderStyle="none" label="main">
  <mx:Button click="onClick(event)" />
</mx:Canvas>

будет преобразовано в:

new UIComponentDescriptor({
    "type":Canvas,
    "id":mainCanvas,
    "styleFactory":function():void {
        this.borderStyle="none";
    },
    "propertiesFactory":function():Object {
        return({
            "label":"main"
            "childDescriptors":[new UIComponentDescriptor({
             // button's code in here
            });
            ]
        })
    }
})

Для этих событий:

Поскольку вы можете записать событие клика в тегах mxml, например btnOnClick() и btnOnClick(event)компилятору нужно что-то сделать, чтобы обработчик событий принял правильный аргумент.Итак, для тега Button, о котором я только что упомянул, значение, соответствующее ключу "event", будет таким: {"click":"__on_click"}.Затем компилятор создаст новый вызов функции __on_click, который может выглядеть следующим образом:

public function __on_click(event:MouseEvent):void {
    onClick(event);
}

Очевидно, что после преобразования UIComponentDescriptor в .mxml вы должны заменить функцию events.

Для конструктора:

.mxml файл не может иметь конструктора, но компилятор создаст его в файле .as, который содержит UIComponentDescriptor.Конструктор также выполнит некоторую инициализацию для своих переменных.При преобразовании в файл .mxml вам необходимо выполнить эту инициализацию после объявления переменной.Например:

public function MyCanvas(){
    this._documentDescriptor_ = new UIComponentDescriptor({
    //……
    });
    this.myArray = new Array();
}

вы должны преобразовать его в это:

<fx:Script><![CDATA[
var myArray:Array = new Array();
]]></fx:Script>

Поэтому самая тяжелая работа - преобразовать UIComponentDescriptor в теги .mxml.А вот простой скрипт на python, который может помочь вам сделать это:

UIComponentDescriptor2XML

...