0

我有 3 个项目依赖于同一个共享库。

库中有一个单例类,它在整个项目中提供全局共享对象,无论如何,这个全局共享对象是一个类的实例,这取决于平台,例如:

在移动应用程序上:

public static var message : TMobileMessage;

在桌面应用程序上:

public static var message : TDesktopMessage;

在网络应用程序上:

public static var message : TWebApplication;
  • 如何在声明上实现条件编译,因为以下代码不起作用:

    If( CONFIG::applicationType == 'mobile' )
        public static var message : TMobileMessage;
    else
       If( CONFIG::applicationType == 'desktop' )
           public static var message : TDesktopMessage;
       else
           If( CONFIG::applicationType == 'web' )
               public static var message : TWebApplication;
    
4

2 回答 2

2

我建议以下。

  1. 像这样使用条件编译器的声明:

    CONFIG::MOBILE { public static var message : TMobileMessage; }

    CONFIG::DESKTOP { public static var message : TDesktopMessage; }

    CONFIG::WEB { public static var message : TWebApplication; }

  2. 为每个配置创建一个 flex-config.xml。在每个 config.xml 中声明这些条件:

弹性配置-mobile.xml

<compiler>
        <define>
            <name>CONFIG::MOBILE</name>
            <value>true</value>
        </define>
        <define>
            <name>CONFIG::DESKTOP</name>
            <value>false</value>
        </define>
        <define>
            <name>CONFIG::WEB</name>
            <value>false</value>
        </define>
</compiler>

flex-config-desktop.xml

<compiler>

        <define>
            <name>CONFIG::MOBILE</name>
            <value>false</value>
        </define>
        <define>
            <name>CONFIG::DESKTOP</name>
            <value>true</value>
        </define>
        <define>
            <name>CONFIG::WEB</name>
            <value>false</value>
        </define>

</compiler>

弹性配置 web.xml

<compiler>

        <define>
            <name>CONFIG::MOBILE</name>
            <value>false</value>
        </define>
        <define>
            <name>CONFIG::DESKTOP</name>
            <value>false</value>
        </define>
        <define>
            <name>CONFIG::WEB</name>
            <value>true</value>
        </define>

</compiler>
  1. 在构建脚本或 IDE 中使用适当的 flex-config。
于 2012-12-09T15:21:02.573 回答
1

如果将 CONFIG 定义为编译器参数,或修改 flex_config.xml,则可以使用以下内容:

( TDesktopMessage、TMobileMessage 等应该扩展 IMessage 或任何你想要的。)

public static var message:IMessage;


CONFIG::mobile
{
  msg = "mobile"; //or msg = messages[mobile] or however you want to declare
}

CONFIG::desktop
{
  msg = "desktop";
}

CONFIG::web
{
  msg = "web";
}
于 2012-12-09T23:50:48.027 回答