我在mxml中定义的组件的脚本块中定义了受保护的函数,如下所示:
<s:VGroup xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" creationComplete="onCreationComplete()">
<fx:Script>
<![CDATA[
protected function onCreationComplete():void {
}
...
是否可以覆盖组件实例中的函数,如下所示:
<gen:CreateObjectFormSubmit id="formSubmit">
<fx:Script>
<![CDATA[
override protected function onCreationComplete():void {
form=form1;
}
]]>
</fx:Script>
答案 0 :(得分:4)
当然,你可以。 MXML组件是一个类,因此如果您基于组件A创建组件B(B继承自A),那么您可以覆盖B中的A方法。
答案 1 :(得分:1)
要覆盖任何函数,您想要覆盖的函数应该在当前类的父类中可用。
public class A {
public function methodtooverride():void{
trace('in class A');
}
}
public class B extends A {
override public function methodtooverride():void{
trace('in class B');
}
}
答案 2 :(得分:1)
请注意你在哪里以及如何宣布你的超级班级。从上面提供的语法看,您可能正在尝试声明&lt; component&gt; mxml类中的标记,如果是这种情况,编译器会将其视为单独的子对象,而不是实际的扩展。
首先,根级别标签不能声明一个id(但组件可以 - 这就成了类名),你很可能需要显式声明所有的xml名称空间。
为了使其成为真正的扩展,您的第一个&lt; VGroup&gt;类需要命名为CreateObjectFormSubmit,这将成为扩展类的根标记。但是有一个问题,如果你从mxml类扩展,你不能声明任何额外的子代(由于布局规则,以mxml表示法)。
如果你说的是你的类的实例,那么你就不能覆盖它,因为&lt; Script&gt;的函数范围。标记仍然位于根级别。当声明&lt; component&gt;时,这有时也被称为'outerDocument'。标签
上述在常规AS中执行此操作与以下内容不同:
class SomethingCool extends UIComponent {
...
public function addButtons():void
{
var btn:Button = new Button();
btn.id = 'formSubmit';
//can't declare an override of Button here
}
}