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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 23.01.2011, 15:58
xaoc вне форума Посмотреть профиль Отправить личное сообщение для xaoc Найти все сообщения от xaoc
  № 1  
Ответить с цитированием
xaoc

Регистрация: Feb 2006
Сообщений: 19
По умолчанию не работает addChild

Есть компонент, динамически грузит и прокручивает в себе фотки
Столкнулся с проблемой, что ни динамически, ни руками не создаются и не добавляются компоненты(фото)

Код AS3:
this.addElement(*)
работает если не обращаться внутрь создаваемого компонента, если пытаться что-то сделать там, добавления не происходит
Код AS3:
this.addChild(*)
не работает вообще, ни при каких условиях

код компонента
Код AS3:
<?xml version="1.0" encoding="utf-8"?>
<s:BorderContainer xmlns:fx="http://ns.adobe.com/mxml/2009" 
				   xmlns:s="library://ns.adobe.com/flex/spark" 
				   xmlns:mx="library://ns.adobe.com/flex/mx" width="100%" height="95" initialize="bordercontainer1_initializeHandler(event)" backgroundColor="#000000" backgroundAlpha="0.23" xmlns:ns1="*">
	<fx:Script>
		<![CDATA[
			import mx.events.FlexEvent;
 
			protected function bordercontainer1_initializeHandler(event:FlexEvent):void
			{
				// TODO Auto-generated method stub
				var i:Number = 0;
				for each(var xml:XML in Slides.children())
				{
					var m:Miniature = new Miniature();
					m.x = i*100; m.y = 0;
					//m.load("ds");
					this.addElement(m);
 
					i++;
				}
 
			}
 
		]]>
	</fx:Script>
	<fx:Declarations>
		<!-- Place non-visual elements (e.g., services, value objects) here -->
		<fx:XML id="Slides" source="Slideshow.xml"/>
	</fx:Declarations>
 
 
 
</s:BorderContainer>
код Miniature
Код AS3:
<?xml version="1.0" encoding="utf-8"?>
<s:BorderContainer xmlns:fx="http://ns.adobe.com/mxml/2009" 
				   xmlns:s="library://ns.adobe.com/flex/spark" 
				   xmlns:mx="library://ns.adobe.com/flex/mx" width="100" height="95" borderVisible="false">
	<fx:Script>
		<![CDATA[
			[Embed(source="Cadr.swf")]
			[Bindable]
			public var cadr:Class;
			public function load(url:String):void
			{
				txt.text = url;
			}
		]]>
	</fx:Script>
	<fx:Declarations>
		<!-- Place non-visual elements (e.g., services, value objects) here -->
	</fx:Declarations>
	<mx:SWFLoader x="0" y="0" width="100" height="95" source="{cadr}"/>
	<mx:SWFLoader id="MiniImg" x="0.9" y="12.8" width="98" height="70" scaleContent="true"/>
	<s:TextArea x="0.9" y="12.8" width="98" height="70" fontSize="10" id="txt"/>
</s:BorderContainer>
Flash Builder 4

UPD: Проблема решена Не актуально
Обращаться к созданному компоненту надо после его добавления, а не после объявления в переменной
__________________
Fide, sed cui, vide


Последний раз редактировалось xaoc; 23.01.2011 в 16:07.
Старый 23.01.2011, 16:08
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 2  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
В spark контейнерах нельзя использовать addChild.
Цитата:
работает если не обращаться внутрь создаваемого компонента, если пытаться что-то сделать там, добавления не происходит
Что вы под этим подразумеваете?

Старый 23.01.2011, 16:15
xaoc вне форума Посмотреть профиль Отправить личное сообщение для xaoc Найти все сообщения от xaoc
  № 3  
Ответить с цитированием
xaoc

Регистрация: Feb 2006
Сообщений: 19
Цитата:
В spark контейнерах нельзя использовать addChild.
Уже дошел опытным путем, спасибо за уточнение

Цитата:
Что вы под этим подразумеваете?
При любой попытке обратиться к объектам/функциям внутри создаваемого компонента до его добавления на сцену, просто ничего не происходит. Добавления тоже.

Уже разобрался, вызов конструктора и инициализация происходит только после добавления на сцену
__________________
Fide, sed cui, vide

Старый 23.01.2011, 16:27
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 4  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Цитата:
Уже разобрался, вызов конструктора и инициализация происходит только после добавления на сцену
Вызов конструктора происходит сразу. Вот тут:
Код AS3:
var m:Miniature = new Miniature();
Если под инициализацией вы подразумеваете создание внутренних компонентов объявленных в mxml, то она произойдет не сразу (зависит от нескольких факторов). Но к добавлению на сцену непосредственного отношения не имеет.

Добавлено через 16 минут
В частности внимательно прочитайте вот этот документ.

Добавлено через 22 минуты
Ну и в нагрузку. Это для компонентов Flex3, но для общего понимания полезно, ну и некоторые вещи актуальны и в flex4.

Старый 23.01.2011, 17:39
xaoc вне форума Посмотреть профиль Отправить личное сообщение для xaoc Найти все сообщения от xaoc
  № 5  
Ответить с цитированием
xaoc

Регистрация: Feb 2006
Сообщений: 19
Странно.
За ссылки спасибо, ознакомлюсь

У меня выше описанный код заработал после замены

Код AS3:
m.load("ds");
this.addElement(m);
на

Код AS3:
this.addElement(m);
m.load("ds");
т.е только после добавления обращение становится возможным
__________________
Fide, sed cui, vide

Старый 23.01.2011, 17:53
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 6  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Все правильно, в первом случае createChildren (attachSkin для скинируемых компонентов) еще не вызван. По-сути вам надо было сделать так:

Код AS3:
private var _url:String;
private var _urlChanged:Boolean = false;
 
public function load(url:String):void
{
    _url = url;
    _urlChanged = true;
    invalidateProperties();
}
override protected function commitProperties():void
{
   super.commitProperties();
   if (_urlChanged)
   {
      txt.text = _url;
   }
}


Последний раз редактировалось alatar; 23.01.2011 в 18:00.
Старый 23.01.2011, 19:01
xaoc вне форума Посмотреть профиль Отправить личное сообщение для xaoc Найти все сообщения от xaoc
  № 7  
Ответить с цитированием
xaoc

Регистрация: Feb 2006
Сообщений: 19
Благодарю. Разобрался
__________________
Fide, sed cui, vide

Создать новую тему Ответ Часовой пояс GMT +4, время: 20:26.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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