【发布时间】:2012-10-30 05:49:41
【问题描述】:
我发现 Flex SDK 4.1 和 4.5 之间的 parentDocument 存在一些不一致之处。简而言之,在 4.1 中工作的现有代码在 4.5(和 4.6)中被破坏了。这是一个小例子来演示:
TestProject.mxml
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
minWidth="500" minHeight="500" xmlns:local="*">
<local:SubComponent x="50" y="50"/>
</s:Application>
子组件.mxml
<?xml version="1.0" encoding="utf-8"?>
<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
width="200" height="200">
<fx:Script>
<![CDATA[
import spark.components.Application;
protected function button1_clickHandler(event:MouseEvent):void
{
var app:Application = this.parentDocument as Application;
if (app != null) {
trace('Good');
} else {
trace('Bug');
}
}
]]>
</fx:Script>
<s:Button x="18" y="20" label="Button" click="button1_clickHandler(event)"/>
</s:Group>
使用 4.1 SDK,我可以通过parentDocument 成功检索Application 对象。但是,这在 4.5 SDK 中失败。在 4.5 中,parentDocument 现在是皮肤对象:
"parentDocument" spark.skins.spark.ApplicationSkin (@9d7e479)
如果我上两层,那么我成功获得了Application对象:
"parentDocument.parentDocument" TestProject (@9d7e0a1)
因此,我可以通过将parentDocument 替换为parentDocument.parentDocument 来解决此问题。但是,我不清楚这种变化是否是我可以指望保持一致的预期行为,或者它是否是一个可能会在未来某个时间修复的错误,此时行为将恢复到 4.1 的方式做事。所以,我的问题是:
- 还有其他人遇到过这个问题吗?如果是这样,你是如何处理的 是吗?
- 如果您制定了解决方法,您的解决方案是否依赖于 特定的 SDK 版本,还是适用于所有 SDK 版本?
- 行为从 4.1 到 4.5 的更改是有意的,还是 这是一个错误?我怀疑错误,但我一直找不到任何东西 以一种或另一种方式确定。
请注意,我上面的示例旨在以最少的代码和最小的复杂性来演示问题。在我的实际项目中,我有一个包含TitleWindow 和子组件的模块,我试图让TitleWindow 中的子组件调用方法(通过parentDocument)。因此,涉及查找Application 对象的其他方法的解决方法并不真正适用,因为子组件实际上是在寻找TitleWindow,而不是Application。
【问题讨论】:
标签: apache-flex flex4 flex-spark