Вопрос по mobile – Flash Builder 4.6 - подход кода

0

Я пытаюсь найти правильный подход для "кода за" с помощью Flash Builder для мобильного приложения:

I'm creating a flex mobile AIR project (Based on the "Tabbed view" template) setting my UI in design mode now I want all the logic to be in a separate class that will change the UI look accordingly

Звучит легко, однако я не могу получить подход к этому, любая помощь приветствуется :)

Update:

Основное приложение:

<?xml version="1.0" encoding="utf-8"?>
<s:TabbedViewNavigatorApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
                                  xmlns:s="library://ns.adobe.com/flex/spark" applicationDPI="160">
    <s:ViewNavigator label="a" width="100%" height="100%" firstView="views.aView"/>
    <s:ViewNavigator label="b" width="100%" height="100%" firstView="views.bView"/>
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>
</s:TabbedViewNavigatorApplication>

вид А:

<?xml version="1.0" encoding="utf-8"?>
<s:View xmlns:fx="http://ns.adobe.com/mxml/2009" 
        xmlns:s="library://ns.adobe.com/flex/spark" title="a">
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>
    <s:Label id="txt" x="280" y="139" text="Label"/>
</s:View>

Итак, теперь я хочу, чтобы MyClass изменил txt textField в соответствии с моей логикой, каков правильный подход?

Я понимаю, что вы хотите разделить код AS3 и код MXML, это правильно? Вы не сможете сделать это с помощью режима разработки. JeffryHouser
Я думаю, что вы можете быть не уверены в использовании кода позади ... или я не понимаю, что вы пытаетесь сделать одним из двух :). Обычно вы передаете данные в представление и можете настроить представление так, чтобы оно соответствующим образом реагировало на назначенные ему данные. Это не требует кода позади. Если у вас есть общая логика между представлениями, на которые вы хотите сослаться из каждого, вы можете создать общий базовый класс для обоих представлений (в некотором смысле "code-behind"), вы также можете использовать статические методы в отдельной & quot; утилите & quot; учебный класс. Существует много возможных подходов. shaunhusain

Ваш Ответ

3   ответа
0

Элегантным способом будет реализация IMXMLObject. При реализации этого интерфейса метод IMXMLObject # initialize будет принимать компонент (именованный документ типа Object) и необязательный идентификатор (типа String) в качестве аргументов, и вы можете легко реализовать этот шаблон. Большим преимуществом является то, что вы используете композицию перед наследованием, а при использовании интерфейсов вы можете использовать ее как некий тип сохранения типа mix-in как поведение представления:

    package net.icodeapp.examples.views
    {
      import flash.events.MouseEvent;

      import mx.core.IMXMLObject;
      import mx.events.FlexEvent;

      public class ViewBaseModel implements IMXMLObject
      {
        //-------------------------------------------------------------------------
        //
        //          Properties
        //
        //-------------------------------------------------------------------------

        private var _id:String;

        private var _viewBase:ViewBase;

        protected function set viewBase(value:ViewBase):void
        {
          _viewBase = value;

          if (!_viewBase)
            throw new ArgumentError('View must be instance of ViewBase');

          if (!_viewBase.initialized)
            _viewBase.addEventListener(FlexEvent.CREATION_COMPLETE, viewBase_creationCompleteHandler, false, 0, true);
          else
            viewCreationCompleted();
        }

        //-------------------------------------------------------------------------
        //
        //          Constructor
        //
        //-------------------------------------------------------------------------

        public function ViewBaseModel()
        {
        }

        //-------------------------------------------------------------------------
        //
        //          Methods
        //
        //-------------------------------------------------------------------------

        public function initialized(document:Object, id:String):void
        {
          viewBase = document as ViewBase;
          _id = id;
        }

        private function viewCreationCompleted():void
        {
          _viewBase.addEventListener(MouseEvent.CLICK, viewBase_clickHandler);
        }

        //-------------------------------------------------------------------------
        //
        //          Event Handler
        //
        //-------------------------------------------------------------------------

        private function viewBase_creationCompleteHandler(event:FlexEvent):void
        {
          viewCreationCompleted();
        }

        private function viewBase_clickHandler(event:MouseEvent):void
        {
          // todo: do some action
        }
      }
    }

Модель инициализируется и ссылки устанавливаются платформой. Взглянув на сгенерированный код ActionScript, вы увидите, что IMXMLObject # его инициализирует, вызывается в конструкторе после создания экземпляра модели.

    <?xml version="1.0"?>
    <s:Group xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark"
                 xmlns:views="net.icodeapp.examples.views.*">
      <fx:Declarations>
        <views:ViewBaseModel/>
      </fx:Declarations>
    </s:Group>

Модель будет получать по событиям представлением и может вызывать методы на нем.

0

Все, что вы делаете, - это создаете AS-файл, который имеет тот же базовый класс, что и тот, который изначально был настроен для вашего объекта MXML, например, если это VGroup, то сделать MyBaseClass расширением VGroup, а затем изменить VGroup на MyBaseClass.

пример

[Main.mxml]

<main:MainBase 
   xmlns:main="*"
   ...>
</main:MainBase>

[MainBase.as]

public class MainBase extends Application
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Shlomi Schwartz
Error: User Rate Limit Exceeded Shlomi Schwartz
Error: User Rate Limit Exceeded
0

Думайте о своем коде позади как о базовом классе (илиАбстрактный класс). В абстрактном классе это действительно характерно для фактической реализации методов или «реальных объектов». за свойствами, которые следует оставить расширяющему классу (ам) для предоставления.

Это похоже на то, что вы делаете, когда вы устанавливаете базовый класс во Flash в свой собственный класс, но фактические объекты-члены (кнопки и т. Д.) Предоставляются на этапе мувиклипа, экземпляр библиотеки которого связан с вашим клипом.

Для получения дополнительной информации о коде позади, проверьте мойсообщение в блоге здесь. Если вы хотите проверить код для описанного там компонента шаблона,Смотри сюда, Хотя компоненты шаблона менее полезны в мире Spark (IMO).

Error: User Rate Limit Exceeded Shlomi Schwartz

Похожие вопросы