我目前的开发栈是 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 集成是如何与 BlazeDS 4 一起工作的吗?马特呢? Flex 4 有什么问题吗? DCD 如何与 mate eventmaps 配合使用。我知道最好自己尝试一下,但我只想检查是否有人尝试过迁移 Flex 4。如果是这样,有什么问题?您是否注意到任何生产力加速?谢谢。
最佳答案
我无法告诉您有关迁移第三方组件的任何信息。你说的那些我没用。
但是,我可以告诉您,您不能简单地将现有项目加载到 Flash Builder 4 中,将 SDK 更改为 4.0,并期望它重新编译。 Flex 4 中发生了大量变化,通常是不兼容的。
以下是我目前遇到的:
他们确实可以互操作。您可以在单个应用程序中同时使用两者,并且您可以执行诸如将 Spark 组件放入 MX 布局容器中的操作,例如
ViewStack
.应用程序中也有自然的划分,其中一侧使用 Spark,另一侧使用 MX,无需担心出现问题,因为它们不会在 GUI 级别进行互操作。例如,对话框就是这样。他们做这一切的原因是为了支持你听说过的这个新的皮肤 Material :Flash Catalyst , FXG ,以及所有这些。如果你使用 Halo 原版皮肤,除了它是 The Future 之外,我不认为 Spark 对你很重要。
(旁白:获得绿野仙踪回声效果的 Markdown 语法是什么?)
Joan Lafferty(Flex SDK 质量主管)有一篇有值(value)的文章,Differences between Flex 3 and Flex 4 .在 page 4 ,她有一张表格,列出了 Flex 4 中没有被 Spark 组件取代的 Flex 3 MX 组件。其中大部分都没有自己的外观,例如
Accordion
,所以你不需要给它们蒙皮,或者是对话框之类的东西,比如 Alert
. (你应该通读那篇文章的其余部分。它涵盖了我不知道的东西,因为我还没有遇到所有的差异。)VBox
转至 VGroup
s。有很多像这样令人讨厌的小差异。 <Script>
和 <Style>
这实际上不是 MX 的一部分,它们对 Spark 也同样有效。他们没有使用重复的标签集,而是将这些标签移至新的 XML namespace 。对于那些对现有的基于 MX 的应用程序进行分段迁移的人来说,这是一个问题,因为这意味着您仍在使用 mx
MX 组件库的别名,因此这两个库共有的这些标签都必须重命名。这些标签的新 XML 命名空间默认值为 fx
,所以每个 <mx:Script>
必须重命名为 <fx:Script>
, 等等。 IDE 在导入项目时不会为您执行此操作。您只需在尝试构建导入的项目时一一找到它们。如果您打算完全迁移到 Spark,您可以在此处避免一些痛苦。而不是接受
fx
非 MX 标签上的默认命名空间别名,您可以让它继续使用 mx
,因为 MX 不需要它,而 Spark 使用 s
作为其默认值。安装 Flash Builder 4 后的第一项任务应该是生成一个全新的项目,以便您可以研究它并从中复制粘贴诸如这些命名空间声明之类的内容。
@namespace mx "library://ns.adobe.com/flex/mx";
mx|Application {
....
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()
form 并给出字体文件的路径。这里要注意的一个陷阱是,这意味着如果您要嵌入单个字体的多个变体(例如普通和粗体),您之前的代码引用了相同的字体名称,但您的新代码将指向两个不同的文件,因为两个权重不在同一个 .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 中,编译器让您明确地告诉它。 embedAsCFF
CSS 属性为 false
. <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>
新编译器对我来说似乎也没有那么快。我没有对其进行基准测试,只是继续感觉,这对我来说真正重要,因为它仍然让我觉得我的头撞在我的 table 上。 :) 它当然没有在我的开发箱中使用其他 7 个内核。咕噜噜。
关于apache-flex - 任何 Flex 4 迁移经验?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1563482/