Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Enumerate children. Как "пробежаться" по детям моего компонента? (http://www.flasher.ru/forum/showthread.php?t=87332)

Zeiss 02.11.2006 21:58

Enumerate children. Как "пробежаться" по детям моего компонента?
 
Необходимо по окончании создания компонента пробежаться по его дочерним элементам с прикладной целью.
Ни в childrenCreated(), ни в creationComplete они недоступны (numChildren == 0). Та же картина в событии Added, а если отнаследоваться от Container, то событие childAdd не вызывается.
Компонент наследует UIComponent (Container, VBox etc - проблему не решают). Если рядом с "невизуальным" HTTPService бросить кнопку - всё равно, она недоступна (getChildAt()).

Беда. Вообще, между нами, что-то на флексе та-а-ак туго всё даётся… Удивительно. :(

Код:

package com.mirabile.business {
import com.adobe.cairngorm.business.ServiceLocator;

import flash.display.DisplayObject;
import flash.events.Event;

import mx.containers.Box;
import mx.core.Container;
import mx.core.IChildList;
import mx.core.UIComponent;
import mx.events.ChildExistenceChangedEvent;
import mx.events.FlexEvent;
import mx.rpc.AbstractService;
import mx.rpc.http.mxml.HTTPService;

public class ServiceAddon extends UIComponent // или Container или VBox или whatever else
{
 
  private var locator: ServiceLocator = ServiceLocator.getInstance();
 
  public function ServiceAddon(){
      super();
      addEventListener(Event.ADDED, created);
      addEventListener(mx.events.ChildExistenceChangedEvent.CHILD_ADD,
                      childAdded); // НЕ СРАБАТЫВАЕТ
  }

  override protected function childrenCreated():void{
      super.childrenCreated();
      addServices();
  }
 
  private function childAdded(event: ChildExistenceChangedEvent): void{
      checkChild(event.relatedObject);
  }
 
  private function created(event: Event): void{
      addServices();
  }
 
  private function addServices(): void{
      var count: int = numChildren;
      for (var i: int = 0; i < count; i++){
        var obj: DisplayObject = getChildAt(i);
        checkChild(obj);
      }
  }

  private function checkChild(obj: *): void{
      if (obj is HTTPService){
        locator[obj["id"]] = obj;
      } else if(obj is AbstractService){
        locator[AbstractService(obj).id] = obj;
      }
  }
}
}

Код:

<?xml version="1.0" encoding="utf-8"?>
<mirabileBusiness:ServiceAddon
  xmlns:mx="http://www.adobe.com/2006/mxml"
  xmlns:mirabileBusiness="com.mirabile.business.*"
  xmlns:cairngorm="http://www.adobe.com/2006/cairngorm">
 
  <mx:HTTPService id="galleryService"
      showBusyCursor="true"
      method="GET" resultFormat="xml"
      contentType="application/xml"
      requestTimeout="15"
      url="assets/data/dumbxml.php"
      result="event.token.resultHandler(event);"
      fault="event.token.faultHandler(event);" />

</mirabileBusiness:ServiceAddon>



Часовой пояс GMT +4, время: 08:13.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.