我目前正在开发一个使用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")`
右?我在互联网上的几个例子中看到了这一点,所以我认为它必须有效。
此外,我对Flex相对较新,但我认为并不难。
提前致谢
此致
Max B
答案 0 :(得分:2)
Max - 专门回答您的问题,绝对可以在Flex 4应用程序中使用MX组件。您的示例似乎与常规flex 4.6项目一起正常工作。您可能需要确保拥有正确的库路径设置。
答案 1 :(得分:1)
Flex并不困难,但是在主要版本之间进行迁移可能会让人感到痛苦,并且可能需要经验丰富的开发人员。事实上,您必须了解这两个框架,它们的区别是什么,以及如何解决这些差异
所以Is there an easy general way for migrating?
嗯,......不(或者如果你愿意妥协的话,可以在以后做更多的事情。)
至于命名空间:你可以在一个应用程序中一起使用它们中的所有三个,并且你没有什么特别的。也就是说,如果您正在构建传统的Web应用程序。如果您正在构建移动应用程序,则会使用其他一些框架库,这些库不包含mx
年龄的组件。原因是Spark组件或更高效的移动设备还没有桌面那么强大。
这意味着您必须将整个应用程序转换为Spark命名空间。如果您的视图尚未完全与业务逻辑分离,那么您也可以从头开始重写它。
您可以强制编译器包含mx
库,即使在编译移动设备时也是如此。但这会带来性能成本。
那就是说,到目前为止我所说的都是技术层面的。从用户体验的角度来看,你不能指望专为大屏幕设计的应用程序在小屏幕上使用是愉快的。在大多数情况下,这些“简单”转换都是完全失败。