解决方法
不过,我可以告诉您,您将无法将现有项目简单地加载到Flash Builder 4中,将SDK更改为4.0,并期望重新编译. Flex 4中有大量的事情发生了变化,往往不兼容.
这是我到目前为止已经遇到的
>您现在有两个并行组件库Spark和MX. MX是旧的Flex 3组件库,有时称为Halo,尽管这在技术上只是默认皮肤的名称. Spark是新的Flex 4组件库,仅部分替代MX.
他们互操作.您可以在一个应用程序中使用这两个应用程序,您也可以像将Spark组件放在MX Layout容器(如ViewStack)中.在一个应用程序中也有自然的划分,可以让一方使用Spark,另一个MX,而不用担心麻烦,因为它们不能在GUI级别进行互操作.对话框就是这样的.
他们所做的一切都是为了支持你所听到的这个新的皮肤材料:Flash Catalyst,FXG和所有这些.如果您使用股票Halo皮肤,我看不到Spark对您而言非常重要,除了它是The Future.
(另外:有什么是Markdown语法来获得奥兹巫术的回声效果?)
Joan Lafferty(Flex SDK质量负责人)有一篇有价值的文章Differences between Flex 3 and Flex 4. page 4,她有一张表格,列出了Flex 4中没有被Spark组件替代的Flex 3 MX组件.其中大部分都没有自己的外观,像手风琴,所以你不需要去皮肤,或者像对话框,如Alert. (你应该阅读这篇文章的其余部分,它涵盖了我没有的东西,因为我还没有遇到所有的差异.)
>说到皮肤,Flex 3中只有两个MX皮肤仍然支持Flex 4.更多彩的MX皮肤消失了,虽然有一套新的丰富多彩的Spark的皮肤,显示出一些你可以做FXG等等.如果您真的喜欢他们删除的其中一个,那么您无疑可以在Spark之上重新创建它们,但是它不可用于开箱即用.
>许多事情都是renamed,而MX组件的一些Spark替代品有不同的接口,所以有different names.例如,要完全移动到Spark,你必须将VBoxes更改为VGroups.有很多令人讨厌的小差异.
>由于整个双GUI图书馆的事情,Adobe发现自己有一堆MXML标签,如< Script>和< Style>这实际上并不是MX的一部分,它也适用于Spark.他们不是拥有一组重复的标签,而是将它们移动到一个新的XML命名空间.对于现有的基于MX的应用程序进行分段迁移的人员来说,这是一个问题,因为这意味着您仍然在为MX组件库使用mx别名,因此这两个库共同的这些标签都必须重命名.这些标签的新XML命名空间默认为fx,因此每个< mx:Script>必须重命名为< fx:Script>等等. IDE不会为您导入项目.当您尝试让您导入的项目进行构建时,您可以一个接一个地找到它们.
如果您计划完全转向Spark,您可以在此避免一些痛苦.而不是接受非MX标签上的fx默认命名空间别名,您可以让它继续使用mx,因为您不需要MX,而Spark则将其用作默认值.
安装Flash Builder 4后,您的第一个任务应该是生成一个新的新项目,以便您可以对其进行研究,并从其中复制粘贴这些命名空间声明.
>整个MX与Spark和命名空间混乱的另一个影响是您的CSS可能需要调整. Flex对此有一个非标准的扩展,它看起来像这样:
@namespace mx "library://ns.adobe.com/flex/mx"; mx|Application { ....
>所有的命名空间URL都在Flex 3和Flex 4之间进行了更改,至少有一个实例在Flex 4 beta进程中再次更改.
http://www.adobe.com/2006/mxml现在是http://ns.adobe.com/mxml/2009
库://ns.adobe.com/flex/halo现在是库://ns.adobe.com/flex/mx
>用于在CSS中通过其通用名指定嵌入字体名称的local()表单不再起作用.您必须使用url()表单并给出字体文件的路径.
要注意的一个陷阱是,这意味着如果您嵌入了单个字体的多个变体(例如,正常和粗体),您以前的代码将引用相同的字体名称,但是新的代码将指向两个不同的文件,因为两个权重不在同一个.ttf或.otf文件中.例如:
@font-face { src: local("Verdana"); fontFamily: VerdanaEmbedded; fontWeight: normal; } @font-face { src: local("Verdana"); fontFamily: VerdanaEmbedded; fontWeight: bold; }
必须改为:
@font-face { src: url("/Library/Fonts/Verdana.ttf"); fontFamily: VerdanaEmbedded; fontWeight: normal; } @font-face { src: url("/Library/Fonts/Verdana Bold.ttf"); fontFamily: VerdanaEmbedded; fontWeight: bold; }
在Flex 3中,编译器根据fontWeight属性猜测了上述代码引用的两个.ttf字体文件.在Flex 4中,编译器让你明确地告诉它.
>如果您在应用程序中嵌入字体并继续使用MX控件,文本可能会消失或恢复为默认字体.这是因为默认情况下,Flex 4使用不同的字体嵌入机制来支持Flash Player 10中改进的字体渲染引擎.要以旧的方式嵌入字体,以便旧的MX控件仍然可以使用它必须将embedAsCFF CSS属性设置为false.
>国家机制是完全不同的.这个Flex 3代码:
<mx:State name="alternate"> <mx:SetProperty target="{myField}" name="editable" value="false"/> </mx:State> .... <mx:Form ...> <mx:TextInput id="myField"/> .... </mx:Form>
在Flex 4中成为这样
<mx:State name="alternate"/> .... <mx:Form ...> <mx:TextInput id="myField" editable.alternate="false"/> .... </mx:Form>
新的方法对我来说更有意义,因为它将组件标签中的所有单独的组件状态本身,而不是以详细的< mx:State>的方式放在MXML文件的顶部.阻止,但移植到新机制是一个磨练. IDE的转换并不自动化,尽管它真的可以.
>< Application>中的一些标签不再被允许作为直接子代标签.它们分为几个类别:验证器,效果等.您现在必须将其打包成新的< fx:Declarations>标签,像这样:
<fx:Declarations> <mx:Dissolve id="myTransition" duration="100" target="{this}"/> </fx:Declarations>
> Flash Builder中有一个新的项目选项,可以让您继续单独使用Flex 3.5 SDK,而不需要Spark,便于迁移.这对初始测试是有好处的,但在某些时候你想要向前推进,在这一点上你必须与上述所有方面进行对抗.
对于我来说,新的编译器似乎还没有那么快.我没有对它进行基准测试,只是继续感觉,这对我来说真的很重要,因为它仍然让我觉得我的头像在我的桌子上. :)在我的开发框中肯定不使用其他7个内核.哎呀.