【问题标题】:migrating from Flex 3.6 to 4.6从 Flex 3.6 迁移到 4.6
【发布时间】:2013-01-15 17:15:00
【问题描述】:

我目前正在处理一个使用 Flex 3.6 创建的 Adob​​e Flex Air 项目!但是现在应该变成了iPad的App,但是Flash Builder从Flex 4.6开始只能将项目导出为App。所以我正在尝试将项目从 Flex 3.6 转换为 4.6,我想这应该很容易做到,但是库和/或命名空间存在一些问题,这让我感到困惑。这就是我的 Main-mxml 的启动方式:

<s:Application xmlns:mx="http://ns.adobe.com/mxml/2009" 
           xmlns:mx="library://ns.adobe.com/flex/mx" 
           xmlns:s="library://ns.adobe.com/flex/spark"
           xmlns:MyComp="*"
           xmlns:local="*"
           xmlns:srv="generated.webservices.*"
           width="1366"
           applicationComplete="init()"
           backgroundGradientColors="[0xffffff,0xffffff]"
           borderColor="#ffffff"
           color="#eaeaea"
           fontSize="14"
           horizontalScrollPolicy="off"
           layout="absolute"
           paddingBottom="0"
           paddingLeft="0"
           paddingRight="0"
           paddingTop="0"
           verticalScrollPolicy="off">

但我得到了错误:

`Attribute "mx" bound to namespace "http://www.w3.org/2000/xmlns/" was already specified for element "s:Application".`

但如果我删除该行

`xmlns:mx="library://ns.adobe.com/flex/mx"`

那么我当然不能使用例如mx:VBox 不再需要重构整个项目。

我尝试了一些使用 Flex 4.6 的测试示例,例如

<?xml version="1.0"?>
<!-- containers\layouts\BoxSimple.mxml -->
<s:Application 
    xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:mx="library://ns.adobe.com/flex/mx" 
    xmlns:s="library://ns.adobe.com/flex/spark">

    <mx:Box direction="vertical" 
            borderStyle="solid" 
            paddingTop="10" 
            paddingBottom="10" 
            paddingLeft="10" 
            paddingRight="10">

        <mx:Button id="fname" label="Button 1"/>
        <mx:Button id="lname" label="Button 2"/>
        <mx:Button id="addr1" label="Button 3"/>
        <mx:ComboBox id="state">
            <mx:ArrayList>
                <fx:String>ComboBox 1</fx:String>
            </mx:ArrayList>
        </mx:ComboBox>
    </mx:Box>
</s:Application>

但是这里我得到了错误

    `"Could not resolve <mx:Button> to a component implementation." `and more like this.

现在我的问题: 1. 三个命名空间都可以使用

 `(xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:mx="library://ns.adobe.com/flex/mx" 
    xmlns:s="library://ns.adobe.com/flex/spark")`

对吗?我在互联网上的几个示例中看到了这一点,所以我认为它必须有效。

  1. 我是否必须引用/添加外部库才能将 Flex 4.6 与这 3 个命名空间一起使用?
  2. 是否有从 Flex 3.6 迁移到 4.6 的简单通用方法?是否有必要进行更改或必须在 4.6 中工作,即使是在 3.6 中开发的?

此外,我对 Flex 还比较陌生,虽然我认为这并不难。

提前致谢

问候,

最大 B

【问题讨论】:

标签: apache-flex


【解决方案1】:

Max - 要专门回答您的问题,绝对可以在 Flex 4 应用程序中使用 MX 组件。您的示例似乎适用于常规 flex 4.6 项目。您可能需要确保具有正确的库路径设置。

【讨论】:

  • +1;但我会在构建移动项目时添加,默认情况下不包含 MX 库,因为 Mx 组件未针对性能进行优化。
【解决方案2】:

Flex 并不难,但在主要版本之间迁移可能会让人头疼,并且可能需要经验更丰富的开发人员。事实上,您必须了解这两个框架、它们之间的差异以及如何解决这些差异。
所以Is there an easy general way for migrating? 嗯,……不(如果你愿意妥协,可以,稍后再谈)。

至于命名空间:您可以在一个应用程序中同时使用这三个命名空间,您无需为此做任何特别的事情。也就是说,如果您正在构建一个传统的 Web 应用程序。如果您正在构建移动应用程序,则会使用其他一些框架库,它们不包含 mx 时代的组件。原因是 Spark 组件或更高效的移动设备还没有台式机强大。
这意味着您必须将整个应用程序转换为 Spark 命名空间。如果你的视图还没有完全脱离业务逻辑,不妨从头开始重写。

您可以强制编译器包含mx 库,即使在为移动设备编译时也是如此。但这会以性能为代价。

也就是说,到目前为止我所说的只是技术层面的。从用户体验的角度来看,你不能指望一个为大屏幕设计的应用程序在小屏幕上使用起来很愉快。在大多数情况下,这些“简单”转换完全失败。

【讨论】:

  • 非常感谢你们。包括 mx.swc 帮助我将项目中的错误从大约 50 个减少到只有几个特殊错误。但我想我也能解决这些问题。我会看看性能有多差或可接受。它只是一个类似原型的小型应用程序,因此失去一些性能并不是那么关键。但真的很感谢你的快速回复。 Stackoverflow 真的是一个很好的论坛或程序员 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-23
  • 1970-01-01
  • 2018-11-04
  • 1970-01-01
  • 1970-01-01
  • 2014-03-12
相关资源
最近更新 更多