Flex 4.5和4.6之间的Spark生命周期发生变化

时间:2011-12-14 09:34:58

标签: flex components lifecycle flex-spark

我最近将一些项目迁移到了闪亮的新Flex 4.6 SDK。我并没有期待太多麻烦,因为它只是一个小小的释放。但事实上,我到处都收到了数百个错误。这些错误主要来自Spark SkinnableComponent;例如:

override protected function getCurrentSkinState():String {
    return mySkinPart.someProperty ? "normal" : "someOtherState";
}

在4.5以下可以正常工作,但会在4.6中引发nullpointer错误。原因很简单:在创建skinpart之前调用4.6 getCurrentSkinState(),而在4.5中我可以确定处于默认状态的skinpart将在那里。

进一步调查让我相信Skin的初始状态现在是undefined,而不是States数组中的第一个状态(直到它调用getCurrentSkinState()为止)。

修复这些问题通常非常简单,而且我需要更多的防御性编程。但这不是我真正的问题。

真正的问题是,如果组件生命周期发生了变化,我想确切地知道 已经改变了什么以及我的项目的哪些部分可能会受到影响。< / p>

如果有人能够对此有所了解或者至少将我指向正确的地方,我会非常感激,因为我能找到的唯一的发行说明只包括新的移动组件。


修改(这不会改变问题;我只想与您分享我的发现)

我刚遇到的另一个问题:dynamic修饰符似乎不再由子类继承。这是一个纯粹的ActionScript问题,所以我猜这是编译器以不同的方式处理它。

让我解释一下。考虑这个课程:

public class MyClass extends Array { }

现在,如果我尝试将新项目推送到此自定义数组中,如下所示:

var t:Array = new MyClass();
t.push("hello");
  • SDK 4.5.1:没问题
  • SDK 4.6:“无法在运行时在MyClass上创建属性0”

显然那是因为Array是动态的而MyClass不是,所以它很容易修复:

public dynamic class MyClass extends Array { }

并且错误消失了。

但是如果我使用的第三方库有这样的代码并且没有源代码访问权限呢?我的应用程序会破坏,我无法修复它。我的意思是:来吧,对于点发布来说,这不是一个小小的改变。

1 个答案:

答案 0 :(得分:2)

我认为那里有两个问题。

  

1)真正的问题是如果组件生命周期发生了变化,我会   想知道究竟发生了什么变化以及我项目的哪些部分   可能会受到影响。

我还没有看到两个版本之间差异的全面低级分析。如果您真的担心,并且您有空闲时间,可以使用diff工具来比较两个SDK的源代码。不应该有太多重大的结构变化 - 例如重命名的类或包,所以它可能不是那么糟糕。我希望很多课程都不会改变。

  

2)我刚遇到的另一个问题:动态修饰符似乎不再存在   由子类继承。这是一个纯粹的ActionScript问题,所以我   猜测它是以不同方式对待它的编译器。

这个更容易。 dynamic从未被继承过。 Object是动态的,因此如果属性被继承,则每个类也必须是动态的。

如果与动态类实例相关的行为似乎发生了变化,那么代码中还会发生其他事情。