Разделение MXML и Actionscript - PullRequest
       11

Разделение MXML и Actionscript

10 голосов
/ 08 января 2011

Из этого урока http://www.brighthub.com/internet/web-development/articles/11010.aspx Я нашел код ниже.Есть ли способ это исправить, чтобы в файле mxml был только mxml, а код между тегами сценария помещен в файл actionscript?

Спасибо.

-Nick

<mx:Application
    xmlns:mx="http://www.adobe.com/2006/mxml"
    layout="absolute"
    width="600"
    height="400"
    frameRate="100"
    creationComplete="CreationComplete()"
    enterFrame="EnterFrame(event)">
    <mx:Script><![CDATA[
        public function CreationComplete():void
        {

        }

        public function EnterFrame(event:Event):void
        {

        }
    ]]></mx:Script>
</mx:Application>

1 Ответ

12 голосов
/ 08 января 2011

Существует несколько способов достижения этого во Flex:

  • Поместите код AS в файл .as и используйте атрибут «source = yourfile.as» в теге Script :

<mx:Script source="yourfile.as" />

Вы также можете использовать объявление includes="yourfile.as" с тегом Script:

<mx:Script
    <![CDATA[
        include "yourfile.as";

        //Other functions
    ]]>
</mx:Script>

  • Используйте шаблон Code-Behind , где вы определяете код в файле AS, который расширяет визуальный компонент, который вы хотите расширить в своем файле MXML. Затем ваш файл MXML просто расширяет файл AS, и у вас есть (через наследование) доступ ко всему коду. Это будет выглядеть примерно так (я не уверен, что это будет работать для основного файла MXML, который расширяется Application):

AS-файл:

package {
    public class MainAppClass {
        //Your imports here
        public function CreationComplete():void {
        }
        public function EnterFrame(event:Event):void {
        }
    }
}

Файл MXML:

<component:MainAppClass xmlns:component="your namespace here"
                        xmlns:mx="http://www.adobe.com/2006/mxml"
                        layout="absolute"
                        width="600"
                        height="400"
                        frameRate="100"
                        creationComplete="CreationComplete()"
                        enterFrame="EnterFrame(event)">
</component:MainAppClass>

  • Используйте каркас, чтобы внедрить функциональность, которую вы ищете как тип "модели", которая содержит функциональность данных, которую вы будете использовать. Это выглядело бы что-то как у Петрушки:

        <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
                layout="absolute"
                width="600"
                height="400"
                frameRate="100"
                creationComplete="model.CreationComplete()"
                enterFrame="model.EnterFrame(event)">
    
                <mx:Script>
                    <![CDATA[
                        [Inject]
                        [Bindable]
                        public var model:YourModelClass;
                    ]]>
               </mx:Script>
       </mx:Application>
    

На ум приходят две структуры, которые могут помочь с инъекцией: Mate или Петрушка .


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

Main.mxml:

<mx:Application blah,blah,blah>
    <component:YourComponent />
</mx:Application>

YourComponent.mxml:

<component:YourComponentCodeBehind creationComplete="model.creationComplete()"...>
  //Whatever MXML content you would have put in the Main file, put in here
</component:YourComponentCodeBehind>

YourComponentCodeBehind.as

package {
    class YourComponentCodeBehind {
        //Whatever AS content you would have put in the Main .as file, put in here
    }
}

Из того, что я смог извлечь из архитектуры Flex, это очень распространенный способ настройки вашего приложения: ваш основной MXML включает в себя один «вид», который является отправной точкой для остальной части вашего приложения. Это представление содержит все другие представления, которые составляют приложение.

Надеюсь, это имеет смысл:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...