14

我目前的开发堆栈是 MySQL + iBatis + Spring + Spring BlazeDS Integration 1.01 + BlazeDS 3.2 和带有 Mate 0.8.9 框架的 Flex 3。现在 Flash Builder 4 beta 2 已经发布。有一些很酷的功能,比如以数据为中心的开发 (DCD)、表单生成等......你知道 Spring Blazeds 集成如何与 BlazeDS 4 一起工作吗?马特呢?Flex 4 有什么问题吗?DCD 如何适合配对事件图。我知道自己尝试会更好,但我只想检查是否有人尝试过迁移 Flex 4。如果是,有什么问题?您是否注意到任何生产力的提高?谢谢。

4

2 回答 2

25

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

但是,我可以告诉您,您不能简单地将现有项目加载到 Flash Builder 4 中,将 SDK 更改为 4.0,然后期望它重新编译。Flex 4 中发生了很多变化,通常是不兼容的。

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

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

    它们确实可以互操作。您可以在单个应用程序中同时使用两者,并且可以执行诸如将 Spark 组件放入 MX 布局容器(如ViewStack. 应用程序中也有自然划分,可以让一侧使用 Spark,另一侧使用 MX,无需担心麻烦,因为它们不会在 GUI 级别进行互操作。例如,对话框就是这样。

    他们做这一切的原因是为了支持你听说过的这种新的蒙皮东西:Flash CatalystFXG等等。如果您使用库存的 Halo 皮肤,我认为 Spark 对您来说并不重要,除了它是The Future的事实。

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

    Joan Lafferty(Flex SDK 质量主管)有一篇有价值的文章,Flex 3 和 Flex 4 之间的差异。在第 4 页上,她有一个表格列出了 Flex 4 中尚未被 Spark 组件替换的 Flex 3 MX 组件。其中大多数没有自己的外观,例如Accordion,因此您不需要对它们进行蒙皮,或者诸如对话框之类的东西,例如Alert. (你应该通读那篇文章的其余部分。它涵盖了我不知道的东西,因为我还没有遇到所有的差异。)

  • 说到皮肤,Flex 4 中仍然只支持 Flex 3 中的两种 MX 皮肤。颜色更丰富的 MX 皮肤已经消失,尽管有一组新的基于 Spark 的彩色皮肤展示了你可以做的一些事情用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 {
        ....
    
  • Flex 3 和 Flex 4 之间的所有命名空间 URL 都已更改,并且在Flex 4 测试过程中至少有一个实例再次更改。

    http://www.adobe.com/2006/mxml现在http://ns.adobe.com/mxml/2009 library://ns.adobe.com/flex/halo是现在library://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 控件仍然可以使用它,您必须将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>
    

    在 Flex 4 中变成这样:

    <mx:State name="alternate"/>
    ....
    <mx:Form ...>
        <mx:TextInput id="myField" editable.alternate="false"/>
        ....
    </mx:Form>
    

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

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

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

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

于 2009-10-13T23:42:24.357 回答
4

这里有几件事可能会有所帮助:

  1. BlazeDS 的最新版本是 3.2.0.3978。我还没有听到关于新版本的公告。
  2. 由于您将保留相同版本的 BlazeDS,将现有代码移植到 Flex 4 应该不会影响您的后端(Spring BlazeDS 集成、iBATIS、MySQL 等)。
  3. Mate 还没有正式支持 Flex 4。我在尝试切换时遇到了编译错误。这是一个关于解决方法的讨论的链接,以及一个Flex 4 端口的链接。

祝你好运!

于 2009-10-14T12:00:43.240 回答