从Flex 3.6迁移到4.6

时间:2013-01-31 14:51:01

标签: flex

我目前正在开发一个使用Flex 3.6创建的Adobe Flex Air项目!但现在它应该成为iPad的应用程序,但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?
  3. 中开发

    此外,我对Flex相对较新,但我认为并不难。

    提前致谢

    此致

    Max B

2 个答案:

答案 0 :(得分:2)

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

enter image description here

答案 1 :(得分:1)

Flex并不困难,但是在主要版本之间进行迁移可能会让人感到痛苦,并且可能需要经验丰富的开发人员。事实上,您必须了解这两个框架,它们的区别是什么,以及如何解决这些差异 所以Is there an easy general way for migrating?嗯,......不(或者如果你愿意妥协的话,可以在以后做更多的事情。)

至于命名空间:你可以在一个应用程序中一起使用它们中的所有三个,并且你没有什么特别的。也就是说,如果您正在构建传统的Web应用程序。如果您正在构建移动应用程序,则会使用其他一些框架库,这些库不包含mx年龄的组件。原因是Spark组件或更高效的移动设备还没有桌面那么强大。
这意味着您必须将整个应用程序转换为Spark命名空间。如果您的视图尚未完全与业务逻辑分离,那么您也可以从头开始重写它。

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

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