在Flex和AIR之间共享代码

oyjwcjzk  于 2022-09-21  发布在  Apache
关注(0)|答案(3)|浏览(170)

如您所知,我们可以基于Flex构建一个RIA应用程序。此外,我们还可以基于AIR构建桌面应用程序。我有一个问题,如果我们想要同时建立网络和桌面应用程序。我们可以使用相同的代码将我们的产品运送到Web和桌面吗?

e3bfsja2

e3bfsja21#

如果您的应用程序是为它设计的,那么在您的Flex和AIR版本之间共享99%的代码库应该没有问题。

  • Flex/AIR版本需要单独的应用程序MXML,因为AIR使用WindowedApplication,而Flex使用Application
  • 您需要抽象任何纯AIR接口的用法。也就是说,用the Online Documentation中的纯空气图标()标记的任何类、属性或方法。如果您使用像Swift Suspenders这样的依赖项注入容器,您可能会发现这个过程更容易。
  • 或者,您可以将服务定义拆分到两个不同的源树中。这将导致您的AIR项目和Flex项目共享一个源路径,但也有自己的源路径。这样,访问com.application.MyService的代码将在AIR和Flex之间共享,但com.application.MyService实现将根据所使用的“服务源路径”而有所不同。
  • 您可能会发现使用-define+=CONFIG::AIR这样的编译器标志配置每个构建非常有用。这允许您使用条件编译,以便可以为两个版本编译相同的文件,但包括用于AIR版本的特定代码。

以下是条件编译的一个示例:

public function getMyService() : IMyService
{
    CONIFG::AIR
    {
        return new MyServiceThatUsesAnAIROnlyAPI();
    }

    return new FallbackServiceForFlex();
}

不幸的是,没有办法‘否定’一个有条件的标志(即。!CONFIG::AIR),因此您需要明智地使用它,或者包括两个标志(CONFIG::AIRCONFIG::FLEX)

nukf8bse

nukf8bse2#

我很惊讶还没有人这么说,但我会这么做:

1.创建库项目。该项目将包括您的所有共享代码。
1.创建用于Web部署的Flex项目
1.创建空中部署的AIR项目

Flex和AIR项目都可以引用和使用库项目中的代码。AIR项目可以使用特定于AIR的功能,而不会影响Web项目。

如果您需要根据是使用Web项目还是AIR项目来执行不同的操作,您可以在库项目中创建接口,并在主项目中实现它们,以使用各自的API。

ma8fv8wu

ma8fv8wu3#

是的,你能做到的。在代码中必须控制某些条件。

请记住,如果应用程序也是Flex应用程序,那么它将是单一窗口应用程序。对于我做的每个需要这个的项目,我创建了3个项目

1.代码库(主控件为组或画布)
1.flex exporter=>当您构建此应用程序时,您将得到一个flex应用程序,它在主应用程序中具有一个来自#1的控件
1.Air Exporter=>当您构建此应用程序时,您将得到一个Air应用程序,它在主窗口中有一个来自#1的控件。

相关问题