有 Flex 4 迁移经验吗?
-
21-09-2019 - |
题
我当前的开发堆栈是 MySQL + iBatis + Spring + Spring BlazeDS Integration 1.01 + BlazeDS 3.2 和 Flex 3 以及 Mate 0.8.9 框架。现在 Flash Builder 4 beta 2 已经发布。有一些很酷的功能,例如数据中心开发(DCD)、表单生成等......您知道 Spring Blazeds Integration 如何与 BlazeDS 4 配合使用吗?马特呢?Flex 4 有什么问题吗?DCD 如何与配合事件地图相配合。我知道最好自己尝试一下,但我只是想检查一下是否有人尝试过迁移 Flex 4。如果是这样,有哪些问题?您是否注意到生产力有所提高?谢谢。
解决方案
我无法告诉您有关迁移第三方组件的任何信息。你说的那些我都不用。
不过,我可以告诉您,您不能简单地将现有项目加载到 Flash Builder 4 中,将 SDK 更改为 4.0,然后期望它重新编译。Flex 4 中发生了大量变化,而且通常是不兼容的。
以下是我迄今为止遇到过的:
您现在有两个并行组件库:Spark 和 MX。MX 是旧的 Flex 3 组件库,有时称为 Halo,尽管从技术上讲这只是默认皮肤的名称。Spark 是新的 Flex 4 组件库,它仅部分取代了 MX。
它们确实可以互操作。您可以在单个应用程序中使用两者,并且可以执行诸如将 Spark 组件放入 MX 布局容器中之类的操作
ViewStack
. 。应用程序中也存在自然划分,可以一侧使用 Spark,另一侧使用 MX,无需担心出现问题,因为它们不能在 GUI 级别进行互操作。例如,对话框就是这样的。他们做这一切的原因是为了支持你听说过的新的换肤功能: 闪光催化剂, FXG, ,等等。如果你使用普通的 Halo 皮肤,我不认为 Spark 对你很重要,除了它是 未来.
(在旁边:获得绿野仙踪的回声效果的 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,您必须更改您的
VBox
至VGroup
s。像这样的烦人的小差异有很多。由于整个双 GUI 库的事情,Adobe 发现自己有一堆 MXML 标签,例如
<Script>
和<Style>
这实际上并不是 MX 的一部分,但它同样适用于 Spark。他们没有使用重复的标签集,而是将它们移至新的 XML 命名空间。对于那些对现有基于 MX 的应用程序进行分段迁移的人来说,这是一个问题,因为这意味着您仍在使用mx
MX 组件库的别名,因此两个库共有的这些标签都必须重命名。这些标签的新 XML 命名空间默认值是fx
, ,所以每一个<mx:Script>
必须重命名为<fx:Script>
, , 等等。IDE 不会在导入项目时为您执行此操作。当您尝试构建导入的项目时,您只需一一找到它们即可。如果您打算完全迁移到 Spark,那么您可以在这里避免一些痛苦。而不是接受
fx
非MX标签上的默认命名空间别名,可以让它继续使用mx
, ,因为 MX 不需要它,而 Spark 使用s
作为其默认值。安装 Flash Builder 4 后的第一个任务应该是生成一个全新的项目,以便您可以研究它并从中复制粘贴诸如这些命名空间声明之类的内容。
整个 MX 与 MX 的另一个后果Spark 和名称空间混乱是您的 CSS 可能需要调整。为此,Flex 有一个 CSS 的非标准扩展,如下所示:
@namespace mx "library://ns.adobe.com/flex/mx"; mx|Application { ....
Flex 3 和 Flex 4 之间以及至少一个实例中的所有命名空间 URL 均已更改 又变了 在 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; }
必须改为这样:
@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 中,编译器根据以下内容猜测上述代码引用的是哪两个 .ttf 字体文件
fontWeight
属性。在 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>
新方法对我来说更有意义,因为它将所有单独的组件状态放入组件标记本身中,而不是以详细方式放在 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 个核心。咕噜。