2

在 Flex 中,假设我有一个超类……比如:

class SuperComponent extends DragStack {

   private var _childReference:UIComponent;

   public function SuperComponent() {
      // ???
      addEventListener(FlexEvent.CREATION_COMPLETE, onCreationComplete);
   }

   private function onCreationComplete(e:FlexEvent):void {
      //The 'this[]' technique doesn't seem to work and causes run-time errors:
      //trace("Component found: " + this["myButton"]);
   }
}

然后我在我的应用程序中使用了以下派生类(仅以 MXML 模型为例):

<!-- Component ChildComponent.mxml -->
<mx:SuperComponent>
  <mx:Button id="myButton" label="Press Me!" />
</mx:SuperComponent>

如何从 SuperComponent 类中验证“myButton”是否存在并引用它?我需要使用 getChildByName( ... ) 吗?

4

2 回答 2

2

我不确定 DragStack 是什么类型的组件。它是否扩展了 Container (Flex 3) 或 Group (Flex4)?如果是这样,那么组件将经历它的生命周期过程,并且 myButton 在执行 createChildren 方法后应该可以访问。

我相信 MXML 在后台有一些魔力,可以将按钮创建为组件的子组件。

如果 DragStack 不是容器,那么你必须告诉我们 DragStack 的默认属性是什么。DefaultProperty 将在类 metadata中指定。

我相信 MXML 所做的基本上是将 XML Children 分配给 SuperComponent 类的默认属性,如果没有指定其他属性。如果要将其分配给不同的属性,则必须指定它,如下所示:

<mx:SuperComponent>
  <mx:myProperty>
  <mx:Button id="myButton" label="Press Me!" />
 </mx:myProperty>
</mx:SuperComponent>

此语法通常仅用于属性没有简单值的情况,例如 DataGrid 的列数组。

于 2011-05-27T17:44:05.157 回答
1

this["myButton"]即使myButton是在 MXML 中添加的容器的子容器,也不能在容器内使用。myButton仍然不是类属性,而是容器子项的元素。

您最好使用getChildByName()传递"myButton"作为名称。

于 2011-05-27T18:10:21.297 回答