Flash Builder 4.6 - 代码隐藏方法

时间:2012-05-31 14:44:22

标签: flex mobile air flash-builder code-behind

我正在尝试使用Flash Builder为移动应用找出“Code behind”的正确方法:

  1. 我正在创建一个flex移动AIR项目(基于“选项卡式视图”模板)
  2. 在设计模式下设置我的UI
  3. 现在我希望所有逻辑都在一个单独的类中,相应地改变UI外观
  4. 听起来很简单,但是我无法真正做到这一点,任何帮助都表示赞赏:)

    更新

    主要应用:

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

    查看A:

    <?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,正确的方法是什么?

3 个答案:

答案 0 :(得分:0)

您所做的只是创建一个与最初设置的MXML对象具有相同基类的AS文件,例如,如果它是VGroup,则使MyBaseClass扩展VGroup,然后将VGroup更改为MyBaseClass。

实施例

[Main.mxml]

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

[MainBase.as]

public class MainBase extends Application

答案 1 :(得分:0)

将您的Code Behind视为基类(或Abstract Class)。在抽象类中,方法的实际实现或属性后面的“真实对象”通常留给扩展类来提供。

这与将Flash中的基类设置为自定义类时的操作完全相同,但实际的成员对象(按钮等)在MovieClip的舞台上提供,其库实例链接到剪辑

有关代码隐藏的更多信息,请查看我的blog post here.如果您要查看其中描述的模板组件的代码look here。虽然模板组件在Spark世界(IMO)中不太有用。

答案 2 :(得分:0)

一种优雅的方式是实现IMXMLObject。实现此接口时,IMXMLObject #initialize方法将把组件(Object类型的命名文档)和可选的id(String类型)作为参数,您可以轻松实现此模式。最大的优点是,你使用组合而不是继承,当使用接口时,你可以将它用作某种类型的保存混合作为视图行为:

    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>

模型将通过视图接收事件并可以调用其上的方法。