任何Flex 4迁移体验?

Gok*_*mir 14 apache-flex spring blazeds mate flex4

我目前的开发堆栈是MySQL + iBatis + Spring + Spring BlazeDS Integration 1.01 + BlazeDS 3.2和Flex 3 with Mate 0.8.9框架.现在Flash Builder 4 beta 2已经发布.有一些很酷的功能,如数据中心开发(DCD),表单生成等...你知道Spring Blazeds Integration如何与BlazeDS 4一起使用吗?伙伴怎么样?Flex 4有什么问题吗?DCD如何适应配对事件地图.我知道最好自己尝试一下,但我只是想检查是否曾有人试图迁移Flex 4.如果是这样,有什么问题?您是否注意到任何生产力加快?谢谢.

War*_*ung 25

我无法告诉您有关迁移第三方组件的任何信息.我不使用你提到的那些.

我可以告诉你,但是,你不能简单地加载了现有的项目导入到Flash Builder 4,SDK更改为4.0,并期望它重新编译.Flex 4中的大量内容已发生变化,通常不兼容.

以下是我到目前为止遇到的问题:

  • 您现在有两个并行组件库,Spark和MX.MX是旧的Flex 3组件库,有时也称为Halo,尽管从技术上讲它只是默认皮肤的名称.Spark是新的Flex 4组件库,仅部分取代MX.

    他们确实可以互操作.您可以在一个应用程序中使用它们,并且可以执行诸如将Spark组件放在MX布局容器中的操作ViewStack.在应用程序中也存在自然划分,其中一方可以使用Spark,另一方使用Spark,不用担心因为它们不能在GUI级别进行互操作而烦恼.例如,对话框就是这样的.

    他们做这一切的原因是为了支持你一直听到的这种新皮肤:Flash Catalyst,FXG等等.如果你使用Halo皮肤,我不认为Spark对你很重要,除了它是The Future.

    (旁白:什么是Markdown语法来获得绿野仙踪的回声效果?)

    Joan Lafferty(Flex SDK Quality Lead)有一篇有价值的文章,Flex 3和Flex 4之间的差异.在第4页上,她有一个表格列出了Flex 3中没有被Spark组件替换的Flex 3 MX组件.其中大多数都没有自己的外观,例如Accordion,所以你不需要对它们进行去皮,或者是像对话框这样的东西Alert.(你应该仔细阅读那篇文章的其余内容.它涵盖了我没有的内容,因为我还没有遇到所有的差异.)

  • 说到皮肤,Flex 4中仍然只支持Flex 3中的两个MX皮肤.虽然有一套新的彩色Spark皮肤可以展示你可以做的一些事情,但是更加丰富多彩的MX皮肤已经消失了.与FXG等.如果你真的喜欢它们中的一个,你可以毫无疑问地在Spark上重新创建它们,但它不是开箱即用的.

  • 许多内容已被重命名,并且MX组件的一些Spark替换具有不同的接口,因此具有不同的名称.例如,要完全转移到Spark,您必须将VBoxes 更改为VGroups.有很多烦人的小差异.

  • 由于整个双GUI库的东西,Adobe发现自己有一堆MXML标签,<Script>并且<Style>它实际上不是MX的一部分,它对Spark也一样好用.他们没有使用重复的标记集,而是将这些标记移动到新的XML命名空间.对于那些对现有基于MX的应用程序进行分段迁移的人来说,这是一个问题,因为这意味着您仍在使用mxMX组件库的别名,因此这两个库共有的这些标记都必须重命名.这些标记的新XML命名空间默认为fx,因此每个<mx:Script>都必须重命名为<fx:Script>,依此类推.在导入项目时,IDE不会为您执行此操作.当您尝试构建导入的项目时,您只需逐个找到它们.

    如果你打算完全转向Spark,你可以避免一些痛苦.fx您可以让它继续使用mx,而不是接受非MX标签上的默认命名空间别名,因为您不需要使用MX,而Spark则使用s它作为默认值.

    安装Flash Builder 4后的第一个任务应该是生成一个全新的项目,以便您可以研究它并从中复制粘贴这些命名空间声明.

  • 整个MX与Spark和命名空间混乱的另一个影响是你的CSS可能需要调整.Flex为此提供了非标准的CSS扩展,如下所示:

    @namespace mx "library://ns.adobe.com/flex/mx";
    mx|Application {
        ....
    
    Run Code Online (Sandbox Code Playgroud)
  • 所有命名空间URL在Flex 3和Flex 4之间都已更改,并且在Flex 4 beta过程中至少有一个实例再次更改.

    http://www.adobe.com/2006/mxml现在http://ns.adobe.com/mxml/2009 library://ns.adobe.com/flex/halo是现在library://ns.adobe.com/flex/mx

  • local()在CSS中按公用名指定嵌入字体名称的表单不再起作用.您必须使用url()表单并提供字体文件的路径.

    这里要注意的一个陷阱是,这意味着如果您嵌入单个字体的多个变体(例如,普通和粗体),您之前的代码引用相同的字体名称,但是您的新代码将指向两个不同的文件,因为两个权重不在同一个.ttf或.otf文件中.例如,这个:

    @font-face {
        src: local("Verdana");
        fontFamily: VerdanaEmbedded;
        fontWeight: normal;
    }
    @font-face {
        src: local("Verdana");
        fontFamily: VerdanaEmbedded;
        fontWeight: bold;
    }
    
    Run Code Online (Sandbox Code Playgroud)

    必须改为:

    @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;
    }
    
    Run Code Online (Sandbox Code Playgroud)

    在Flex 3中,编译器根据fontWeight属性猜测上面代码引用了哪两个.ttf字体文件.在Flex 4中,编译器会让您明确地告诉它.

  • 如果您在应用程序中嵌入字体并继续使用MX控件,则文本可能会消失或恢复为默认字体.这是因为,默认情况下,Flex 4使用不同的字体嵌入机制来支持Flash Player 10中改进的字体呈现引擎.要以旧方式嵌入字体以便旧的MX控件仍然可以使用它,必须将embedAsCFFCSS属性设置为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>
    
    Run Code Online (Sandbox Code Playgroud)

    在Flex 4中成为这样:

    <mx:State name="alternate"/>
    ....
    <mx:Form ...>
        <mx:TextInput id="myField" editable.alternate="false"/>
        ....
    </mx:Form>
    
    Run Code Online (Sandbox Code Playgroud)

    这种新方式对我来说更有意义,因为它将所有单独的组件状态放在组件标签本身中,而不是在详细<mx:State>块中的MXML文件顶部,但移植到新机制有点像研磨.IDE不会自动转换,尽管它确实可以.

  • 有些标签不再允许作为<Application>标签的直接子节点.它们分为几类:验证器,效果等.您现在必须将它们打包成一个新<fx:Declarations>标签,如下所示:

    <fx:Declarations>
        <mx:Dissolve id="myTransition" duration="100" target="{this}"/>
    </fx:Declarations>
    
    Run Code Online (Sandbox Code Playgroud)
  • Flash Builder中有一个新的项目选项,可以让您继续单独使用Flex 3.5 SDK,而不需要Spark,以便于迁移.这对初始测试很有好处,但在某些时候你想继续前进,此时你必须应对上述所有问题.

新的编译器对我来说似乎也不那么快.我没有对它进行基准测试,只是继续感觉,这对我来说真的很重要,因为它仍然让我感觉像是在我的桌子上敲我的头.:)当然,我的开发框中没有使用其他7个内核.哎呀.