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

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

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

Регистрация: Jun 2011
Сообщений: 212
По умолчанию Проблема использования s:Image внутри s:ItemRenderer

Если реализовать стандартный пример “список изображений” типа http://blog.flexexamples.com/2008/03...elist-control/
но с использованием spark, то возникает проблема вывода картинок при таком синтаксисе:

Код AS3:
<s:ItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009"
				xmlns:s="library://ns.adobe.com/flex/spark"
				width="165" height="200" opaqueBackground="0xEFEFEF">	
	<s:Label  text="{XML(data).@title}"/>
	<s:Image id="img" source="{XML(data).@thumb}" />
</s:ItemRenderer>
А именно:
  • {XML(data).@title} - отображается нормально (в компоненте s:Label)
  • {XML(data).@thumb} - вообще не отображается (в компоненте s:Image)


При этом без проблем работает две конструкции (при тех же самых параметрах для s:List, при том же самом dataProvider)

1. Оригинальная конструкция из примера (mx:Box вместо s:ItemRenderer и mx:Image вместо s:Image):

Код:
<mx:Box 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="165" height="200" opaqueBackground="0xEFEFEF">
	<s:Label  text="{XML(data).@title}" />
	<mx:Image id="img" top="5" width="150" height="150" horizontalCenter="1"
		source="{XML(data).@thumb}" />
</mx:Box>

2. Использование функции в качестве значения img.source:

Код AS3:
<s:ItemRenderer 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="165" height="200" opaqueBackground="0xEFEFEF">
 
	<fx:Script>
		<![CDATA[
			protected function dummyfunc(fn:String):String {
				return fn;
			}
		]]>
	</fx:Script>
 
	<s:Label  text="{XML(data).@title}" />
	<s:Image id="img" source="{dummyfunc(XML(data).@thumb)}" />
</s:ItemRenderer>

Кстати, почему-то не работает такой вариант (http://www.flasher.ru/forum/showthread.php?t=164062):
Код AS3:
override public function set data(value:Object):void {
	img.source = XML(value).@thumb; 
	trace(XML(value).@thumb);
	super.data = value;
}


Так или иначе тема поднимается регулярно (например здесь http://www.flasher.ru/forum/showthread.php?t=157149 и здесь http://www.flasher.ru/forum/showthread.php?t=164062).

Но "фундаментального" ответа на вопрос:
почему s:ItemRenderer + s:Image не может использовать xml-привязку в source, а mx:Box + mx:Image может?
я не нашел.

Может кто подскажет?


Последний раз редактировалось trng; 21.09.2011 в 02:04.
Старый 20.09.2011, 23:36
Dimitry_II вне форума Посмотреть профиль Отправить личное сообщение для Dimitry_II Найти все сообщения от Dimitry_II
  № 2  
Ответить с цитированием
Dimitry_II

Регистрация: Jan 2010
Сообщений: 211
А ты уверен, что проблема с s:Image?
XML(value).@attr возвращает не String, а XMLList. Поэтому думаю, что у s:Image просто другая трактовка приведения типа в отличие от SWFLoader (source у mx:Image наследовано у него). Кстати, твой второй работающий пример это подтверждает - когда значение текстовое и тип четко приведен, то срабатывает нормально.

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

блогер
Регистрация: Sep 2009
Сообщений: 2,463
Записей в блоге: 2
Попробуйте задавать источник для Image в блоке
<fx:Script><![CDATA[
]]></fx:Script> ну и там протрейсить что он получает.

Старый 21.09.2011, 01:50
trng вне форума Посмотреть профиль Отправить личное сообщение для trng Найти все сообщения от trng
  № 4  
Ответить с цитированием
trng

Регистрация: Jun 2011
Сообщений: 212
Цитата:
Сообщение от Dimitry_II Посмотреть сообщение
А ты уверен, что проблема с s:Image?
XML(value).@attr возвращает не String, а XMLList. Поэтому думаю, что у s:Image просто другая трактовка приведения типа в отличие от SWFLoader (source у mx:Image наследовано у него). Кстати, твой второй работающий пример это подтверждает - когда значение текстовое и тип четко приведен, то срабатывает нормально.
Проблема таки с " другой трактовкой приведения типа в отличие от SWFLoader".
Вот так работает:

Код AS3:
...
<s:Image id="img" source="{String(XML(data).@thumb)}" />
...
А вот и объяснение. В SWFLoader.loadContent есть такой код:
Код AS3:
 ...
else
        {
            // We have something that is not a class or string (XMLNode, for 
            // example). Call toString() and try to load it.
            url = classOrString.toString();
...
Ни в s:Image, ни в его родителях ничего такого я не нашел.

Добавлено через 3 минуты
Аналогичным образом заработал и вариант с set data:

Код AS3:
override public function set data(value:Object):void {
	img.source = String(XML(value).@thumb); 
	trace(XML(value).@thumb);
	super.data = value;
}

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

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

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


 


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


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