Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 02.11.2006, 21:58
  № 1  
Ответить с цитированием
Zeiss
Guest

Сообщений: n/a
Question 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, время: 09:17.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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