В какой фазе события суперкласс может ссылаться на потенциальный существующий компонент в своем производном классе? - PullRequest
2 голосов
/ 27 мая 2011

Во 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>

Как мне проверить наличие "myButton" из класса SuperComponent и сослаться на него? Нужно ли использовать getChildByName (...)?

Ответы [ 2 ]

2 голосов
/ 27 мая 2011

Я не уверен, какой тип компонента DragStack.Расширяется ли контейнер (Flex 3) или группа (Flex4)?Если это так, то компонент будет проходить через процесс жизненного цикла , и myButton должен быть доступен после выполнения метода createChildren.

Я полагаю, что MXML делает что-то волшебное, чтобы создать кнопку как дочерний элемент вашего компонента.

Если DragStack не является контейнером, то вы должны сообщить нам, каково свойство DragStack по умолчанию.Свойство DefaultProperty указывалось бы в метаданных класса .

Я полагаю, что MXML в основном назначает дочерние элементы XML свойству по умолчанию класса SuperComponent, если не указано другое свойство.Если вы хотите назначить его другому свойству, вам нужно его указать, например:

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

Этот синтаксис обычно используется только в ситуациях, когда свойство не имеет простого значения,такой как массив столбцов для DataGrid.

1 голос
/ 27 мая 2011

Вы не можете использовать this["myButton"] из контейнеров, даже если myButton является дочерним элементом этого контейнера, добавленного в MXML.myButton все еще не свойство класса, а элемент дочерних элементов контейнера.

Вам лучше использовать getChildByName(), передавая "myButton" в качестве имени.

...