0

在 Flex 移动应用程序中,我有 5 个View,通过 5 个不同的社交网络(包括 Google+ 和 Facebook)处理 OAuth 登录。View正在通过如下所示的菜单选择 s :

在此处输入图像描述

文件名是 FB.mxml、GG.mxml、MR.mxml、OK.mxml、VK.mxml,它们的源代码看起来非常相似:

<?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" 
        viewActivate="loadInfo(event)"
        viewDeactivate="closeSWV(event)"
        title="Facebook.com">
....
            private function closeSWV(event:Event=null):void {
                _busy.visible = _busy.includeInLayout = false;
                _reload.visible = _reload.includeInLayout = true;

                stage.removeEventListener(Event.RESIZE, resizeSWV);
                if (! _swv)
                    return;
                _swv.removeEventListener(Event.COMPLETE, extractAccessToken);
                _swv.removeEventListener(LocationChangeEvent.LOCATION_CHANGE, extractAccessToken);
                _swv.removeEventListener(IOErrorEvent.IO_ERROR, closeSWV);
                _swv.removeEventListener(ErrorEvent.ERROR, closeSWV);
                _swv.dispose();
                _swv = null;
            }           

            private function resizeSWV(event:Event=null):void {
                if (! _swv)
                    return;
                // align to the right-bottom corner
                _swv.viewPort = new Rectangle(stage.stageWidth - Preferans.SCALE * width, 
                    stage.stageHeight - Preferans.SCALE * height, 
                    Preferans.SCALE * width, 
                    Preferans.SCALE * height);
            }
....
        <s:VGroup>
            <s:Label id="_first"  fontWeight="bold" text="Your name:" />
            <s:Label id="_gender" fontWeight="bold" text="Gender:" />
            <s:Label id="_city"   fontWeight="bold" text="City:" />
        </s:VGroup>

    <s:Button id="_play"
              label="Play" 
              click="startGame(event)"
              includeInLayout="false"
              visible="false" />
</s:View>

我的问题是:上面列出的 5 个 mxml 文件有许多相似的方法和变量以及 UI 元素,而只有少数不同的方法和变量。

我已经多次尝试为它们引入一个“基类”并且总是放弃,因为它对于 mxml 文件(与纯 AS3 类相比)并不简单。

有没有人有一个想法,如何解决这个问题?

4

1 回答 1

3

您可以定义一个抽象类来扩展您希望在列表的每一行中使用的 UI 组件。在您的情况下,它将扩展View.

package your.package{
    public class SocialAccountView extends View{

        // in this class you can add the generic methods
        // that you want the view to have

    }
}

之后,在mxml文件中,您可以使用您创建的类作为主要类型,而不是View

<your.package:SocialAccountView
    xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark" 
    viewActivate="loadInfo(event)"
    viewDeactivate="closeSWV(event)"
    title="Facebook.com">

</your.package:SocialAccountView>

这样您就知道列表中的所有项目都是该类型的,并且具有父类的方法。您甚至可以覆盖每个视图中的方法。

关于 UI 组件,您可以使用它们的最大抽象级别(我知道)是构建一个额外的组件并在所有视图中使用它。就像是...

标签.mxml

    <s:VGroup>
        <s:Label id="_first"  fontWeight="bold" text="Your name:" />
        <s:Label id="_gender" fontWeight="bold" text="Gender:" />
        <s:Label id="_city"   fontWeight="bold" text="City:" />
    </s:VGroup>

然后在每个组件中使用它

<your.package:Labels 
              id="labelsComponent"/>

希望这可以帮助。

于 2013-02-03T18:30:22.660 回答