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

RIA*_*tar 9 apache-flex lifecycle components flex-spark

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

override protected function getCurrentSkinState():String {
    return mySkinPart.someProperty ? "normal" : "someOtherState";
}
Run Code Online (Sandbox Code Playgroud)

会在4.5下工作得很好,但会nullpointer在4.6中给我一个错误.原因很简单:在getCurrentSkinState()创建skinpart之前调用4.6 ,而在4.5中我可以确定处于默认状态的skinpart会在那里.

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

解决这些问题通常非常简单,而且需要我的防守编程.但这不是我真正的问题.

真正的问题是,如果组件的生命周期发生了变化,我想知道到底是什么改变了我的项目的哪些部分可能会受到影响.

如果有人能够对此有所了解或者至少将我指向正确的地方,我可以阅读所有相关信息,我将非常感激(因为我能找到的唯一发行说明仅涵盖新的移动组件).


编辑(这不会改变问题;我只是想与你分享我的发现)

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

让我解释.考虑这个课程:

public class MyClass extends Array { }
Run Code Online (Sandbox Code Playgroud)

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

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

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

public dynamic class MyClass extends Array { }
Run Code Online (Sandbox Code Playgroud)

并且错误消失了.

但是,如果我使用的第三方库具有这样的代码并且我没有源代码访问权限呢?我的应用程序会破坏,我无法修复它.我的意思是:来吧,点发布并没有什么小变化.

Pet*_*all 2

我认为这里面有两个问题。

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

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

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

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

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