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

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

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

Регистрация: Dec 2006
Сообщений: 230
По умолчанию E4X to Array

Собственно, сабж. Имеем простой XML:
Код:
  <assets>
	<image src="assets/images/_sorry_.gif"/>
	<image src="assets/images/9_may_08.jpg"/>	
  </assets>
Надо загнать в массив значения из атрибутов src. Пути к картинкам для последующей заливки. Можно, конечно, гонять циклы, но вроде E4X у нас теперь зажигать должен... Он, собственно, и жж0т:
Код AS3:
trace(aXml.assets..image.@src);
Всё вытаскивает, но безнадёжно слепленное...
Как добыть неслепленное и засунуть поштучно в массив??

На текущий момент проблемку решаю так:
Код AS3:
			for each (var node:XML in aXml.assets.children()) {
				arrAssets.push(node.@src.toXMLString());
			}


Последний раз редактировалось Ariel; 30.10.2009 в 02:44.
Старый 30.10.2009, 02:47
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 2  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Код AS3:
var foo:XML = 
<assets>
	<image src="assets/images/_sorry_.gif"/>
	<image src="assets/images/9_may_08.jpg"/>	
</assets>;
var bar:XMLList = foo.image.@src;
trace("XMLList", bar[0], bar[1]);
// для извращенцев:
var a:Array = [];
foo.image.@src.(a.push(valueOf()));
trace("Array", a[0], a[1]);
__________________
Hell is the possibility of sanity

Старый 30.10.2009, 03:05
Ariel вне форума Посмотреть профиль Отправить личное сообщение для Ariel Найти все сообщения от Ariel
  № 3  
Ответить с цитированием
Ariel
 
Аватар для Ariel

Регистрация: Dec 2006
Сообщений: 230
Ничего себе!!
Строчка - решает!
Код AS3:
aXml.assets.image.@src.(arrAssets.push(valueOf()));
Спасеба, однако!!

Добавлено через 2 часа 43 минуты
Гражданин wvxvw таки прав! Незачем городить Array. Нормально считывается все из XMLList. Просто trace() этого не знает и лепит все вместе.

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

Регистрация: Feb 2008
Адрес: Череповец
Сообщений: 623
Отправить сообщение для Felicast с помощью ICQ
wvxvw, а вы сами используете данный подход:
Код AS3:
foo.image.@src.(a.push(valueOf()));
просто несколько раз уже встречал ваши сообщения с подобными решениями.
выглядит конечно красиво, но я бы наверно не стал злоупотреблять
__________________
я могу стать всем, если только захочу

Старый 30.10.2009, 12:26
switcher! вне форума Посмотреть профиль Отправить личное сообщение для switcher! Найти все сообщения от switcher!
  № 5  
Ответить с цитированием
switcher!

Регистрация: May 2009
Сообщений: 220
докучи два вопроса:
1. После действий/преобразований строка:
Код AS3:
foo.image.@src.(a.push(valueOf()));
преобразуется в строку:
Код AS3:
foo.image.@src.(2);
(в контексте приведенного кода, конечно)
Собственно вопрос, что происходит дальше и почему нет ошибок? Понимаю, что foo.image.@src может иметь dynamic свойства - поскольку XMLList. Но здесь, вроде как, какое-то иное действие, нежели создание нового свойства.

2. Есть какое-то объяснение почему valueOf() может употребляться свободно и as is только для динамических типов данных? По коду вызвать ту же функцию для нединамического типа не получается, если не произвести приведение а-ля:
Код AS3:
(new Sprite() as Object).valueOf()

Старый 30.10.2009, 15:37
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 6  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Цитата:
Сообщение от Felicast Посмотреть сообщение
wvxvw, а вы сами используете данный подход:
Код AS3:
foo.image.@src.(a.push(valueOf()));
просто несколько раз уже встречал ваши сообщения с подобными решениями.
выглядит конечно красиво, но я бы наверно не стал злоупотреблять
Да, использую, если мне нужно отсортировать XMLList, то вполне даже.

Цитата:
Сообщение от switcher! Посмотреть сообщение
докучи два вопроса:
1. После действий/преобразований строка:
Код AS3:
foo.image.@src.(a.push(valueOf()));
преобразуется в строку:
Код AS3:
foo.image.@src.(2);
(в контексте приведенного кода, конечно)
Собственно вопрос, что происходит дальше и почему нет ошибок? Понимаю, что foo.image.@src может иметь dynamic свойства - поскольку XMLList. Но здесь, вроде как, какое-то иное действие, нежели создание нового свойства.

2. Есть какое-то объяснение почему valueOf() может употребляться свободно и as is только для динамических типов данных? По коду вызвать ту же функцию для нединамического типа не получается, если не произвести приведение а-ля:
Код AS3:
(new Sprite() as Object).valueOf()
valueOf() нужно самому определять для кастомных классов, или вызывать типа так: (myClassInstance as Object).valueOf(), т.как это свойство, ка и остальные унаследовануе с прототипа Object'a не видны при обычном перечислении (чтобы не мешались при сериализации и т.п.)

Код AS3:
foo.image.@src.(a.push(valueOf()));
преобразуется в строку:
Код AS3:
foo.image.@src.(2);
более правильно -

Код AS3:
foo.image.@src.(a.push(valueOf()));
преобразуется в строку:
Код AS3:
foo.image.@src.(Boolean(2));
Код AS3:
foo.image.@src.(true);
Но фишка в том, что результат (т.е. XMLList который мы получили в результате) мы все равно не используем, так что там может быть что угодно - нас это просто не интересует
__________________
Hell is the possibility of sanity

Старый 30.10.2009, 16:30
switcher! вне форума Посмотреть профиль Отправить личное сообщение для switcher! Найти все сообщения от switcher!
  № 7  
Ответить с цитированием
switcher!

Регистрация: May 2009
Сообщений: 220
Вот это я похоже не просто "плаваю" в вопросе, а "ныряю" с булыжником в руках )))
Цитата:
Сообщение от wvxvw Посмотреть сообщение
valueOf() нужно самому определять для кастомных классов
Так ведь Sprite не кастомный класс ?
Цитата:
Сообщение от wvxvw Посмотреть сообщение
или вызывать типа так: (myClassInstance as Object).valueOf(), т.как это свойство, ка и остальные унаследовануе с прототипа Object'a не видны при обычном перечислении (чтобы не мешались при сериализации и т.п.)
Так ведь:
1) trace((new MovieClip).valueOf()); // [object MovieClip]
нормально, без приведения к Object работает.
2) trace((new Sprite).hasOwnProperty("startDrag")); // true
Т.е. метод определенный и унаследованный от Object работает и в Sprite без приведения типа.

Цитата:
Сообщение от wvxvw Посмотреть сообщение
более правильно -
Код AS3:
foo.image.@src.(a.push(valueOf()));
преобразуется в строку:
Код AS3:
foo.image.@src.(Boolean(2));
Код AS3:
foo.image.@src.(true);
черт, здесь - не осилил ))))) Если можно поподробнее
1. a.push(valueOf()) возвращает значение 2. Как там оказывается Boolean(2)? Есть, конечно, соображения, что AS3 пытается привести типы сам. И "завидев" 2-ку, пытается ее перевести в Boolean, но все же - хотелось бы услышать ваш комментарий.
2.
Цитата:
Сообщение от wvxvw Посмотреть сообщение
Но фишка в том, что результат (т.е. XMLList который мы получили в результате)
Имеем:
Код AS3:
foo.image.@src.(true);
Т.е. за точкой (после ...@src) вот эта запись (true) создает еще один XMLList в цепочке foo.image.@src...?

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

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

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


 


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


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