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

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

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

Регистрация: Oct 2010
Сообщений: 67
По умолчанию dataProvider - скроллинг и изменение данных

Столкнулся вот с какой проблемой, имеются компоненты которые используют для вывода массивы bindable
dataProvider="{arrayRooms}"
это может быть и DataGrid и List
Вопрос вот в чем - при изменении данных массива чтобы отобразить эти изменения - делаем arrayRooms.refresh() при это происходит автоматический скрол компонента в то место где были изменения, как его отключить ? чтобы при изменения данных пользователь оставался в той позиции списка, где сейчас находится?

и попутный вопрос - в itemrender используются изображения с внешних сайтов, в некоторых ячейках списка или таблицы могут быть графические элементы, например статус активный - одно изображение, заблокирован другое, и вот если список довольно большой при скроллинге вниз вверх эти фотографии заново закачиваются (это видно в плагине для mozilla - firebug) - как можно отключить повторную закачку изображений ?

P.S. отдельную тему не стал создавать, так как проблемы очень близки друг к другу

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
1. Судя по методу refresh() вы используете не массив, а коллекцию. Научите ваши объекты данных отправлять событие PropertyChangeEvent или вызывайте у коллекции itemUpdated(). Это решит ваши "проблемы". refresh() предназначен применения сортировки и фильтра.
Цитата:
при это происходит автоматический скрол компонента
Это не автоматический скролл. Происходит полная перестройка рендереров.
2. Кэшируйте изображения и скармливайте компонентам уже загруженные, если они были загружены ранее. Или не обращайте внимание, если сервер настроен правильно, то изображения будут взяты из кэша браузера.

Старый 02.06.2011, 18:49
Lexxx_HU вне форума Посмотреть профиль Отправить личное сообщение для Lexxx_HU Найти все сообщения от Lexxx_HU
  № 3  
Ответить с цитированием
Lexxx_HU

Регистрация: Oct 2010
Сообщений: 67
параметром itemUpdated() является объект. откуда его взять если у меня изменилось всего одно значение из 20 полей ?
создавать новый объект с перечислением этих всех полей ? и изменять только одно из них, как то выглядит не разумно, не уж то нет способа попроще - изменилось одно значение извне (не пользователь изменил datagrid)

Старый 02.06.2011, 18:58
zorexundra вне форума Посмотреть профиль Отправить личное сообщение для zorexundra Найти все сообщения от zorexundra
  № 4  
Ответить с цитированием
zorexundra

Регистрация: Dec 2010
Сообщений: 177
1. Запоминайте позицию скроллера и по событию обновления itemRenderer скроллируйте к ней.
2. В этой теме затронут вопрос кэширования изображений в swf при помощи bitmapData:
http://www.flasher.ru/forum/showthread.php?t=148335

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Какие поля? Какое создание объекта?
Пример для itemUpdated
Код AS3:
...
var obj:Object = arrayRooms.getItemAt(5); //вместо Object свой тип
var oldValue:Object = obj.property; //вместо Object свой тип
obj.property = 20; //вместо 20 свое значение
arrayRooms.itemUpdated(obj, "property", oldValue, obj.property); //сообщаем об изменении
Добавлено через 2 минуты
Цитата:
1. Запоминайте позицию скроллера и по событию обновления itemRenderer скроллируйте к ней.
В этом нет необходимости, если не вызывать refresh()
__________________
משיח לא בא
משיח גם לא מטלפן

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

Регистрация: Oct 2010
Сообщений: 67
может я чего то не понимаю но код
Код AS3:
var obj:Object = arrayRooms.getItemAt(t); //вместо Object свой тип
var oldValue:int = obj.timer_sec; //вместо Object свой тип
obj.timer_sec = oldValue-1; //вместо 20 свое значение
arrayRooms.itemUpdated(obj, "timer_sec", oldValue, obj.timer_sec); //сообщаем об изменении
trace('oldValue-'+oldValue);
trace('obj.timer_sec-'+obj.timer_sec);
c datagrid ничего не делает, данные не обновляются. при этом trace показывает то что нужно

P.S.
Есть некоторые сдвиги
если убрать itemRenderer="showSec" и добавить dataField="timer_sec"
то все прекрасно работает, как сделать чтоб с итемрендерором работало ?

itemRenderer
Код AS3:
<?xml version="1.0" encoding="utf-8"?>
<mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml"  xmlns:s="library://ns.adobe.com/flex/spark" 
		 paddingLeft="2" verticalAlign="middle" horizontalAlign="center" height="20" >
	<mx:Style>
		.style_gray {
			color:#999999;
		}
		.style_black {
			color:#000000;
		}
	</mx:Style>
	<mx:Script>
		<![CDATA[
			override public function set data(value:Object):void {
				super.data = value;
				if (value != null) {
					var countSecCreateDelta:int = int(value.timer_sec);
					// если 2 серый стиль
					if ( int(value.table_count_players) < 3 ) {
						id_label_create_delta.styleName = 'style_gray';
					} else {
						id_label_create_delta.styleName = 'style_black';
					}
					// дефолтные значения
					if (countSecCreateDelta < 0) {
						id_label_create_delta.text = '00:00';
					} else if (countSecCreateDelta < 10) {
						id_label_create_delta.text = '00:0'+value.table_create_delta;
					} else {
						id_label_create_delta.text = '00:'+value.table_create_delta;
					}
					// конец условия на null
				}
				// конец функции
			}
		]]>
	</mx:Script>
	<s:Label 	id="id_label_create_delta" />
</mx:HBox>


Последний раз редактировалось Lexxx_HU; 03.06.2011 в 12:26.
Создать новую тему Ответ Часовой пояс GMT +4, время: 00:38.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

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

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


 


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


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