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

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

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

блогер
Регистрация: Sep 2009
Сообщений: 2,463
Записей в блоге: 2
По умолчанию ItemRenderer в DataGrid

DataGrid имеет два столбца. В первом выводятся данные во втором ItemRenderer кастомномного компонента:

Код AS3:
<?xml version="1.0" encoding="utf-8"?>
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml"
		 xmlns:s="library://ns.adobe.com/flex/spark"
		 horizontalAlign="center"
		 verticalAlign="middle"
		 horizontalScrollPolicy="off"
		 verticalScrollPolicy="off"
		 width="18"
		 height="18" >
 
	<s:Button skinClass="components.viewButton" x="0" y="0" toolTip="Посмотреть " click={parentDocument.view1(event)}" />
 
</mx:VBox>
Компонент - это просто иконка глаза, сделана в виде кнопки для пущего эффекта. По клику меняются данные в первом столбце в выбранной строке (например, появляются).

Необходимо чтобы после клика нельзя было кликнуть по глазу опять. Пробовал this.visual = false и this.enabled = false, но кнопка становится только замутненной, при этом только со второго клика (для первой кнопки, потом с остальными нормально).

Кроме того, при прокрутке большого списка, оказывается, что каким-то образом отключаются и другие рендереры ниже.

Кроме того, при использования скина Zen (да и при некоторых других), этот компонент делает фон под ним другого темного цвета.

Кроме того, не получается менять курсор над рендерором на курсор в виде руки.

Кроме того, если меняется ArrayCollection который является датапровайдером, то это никак не влияет на ренедереры и они остаются недоступными. Как их обновить при изменениях массива?

В общем одни проблемы...

Старый 18.01.2011, 11:50
zorexundra вне форума Посмотреть профиль Отправить личное сообщение для zorexundra Найти все сообщения от zorexundra
  № 2  
Ответить с цитированием
zorexundra

Регистрация: Dec 2010
Сообщений: 177
1. Присвойте кнопке свойство id. В обработчике ItemRenderer this.view1(event) управляйте свойствами кнопки, например: id.visible = false;
2. Перепишите методы set, get data для ItemRenderer.
5. Не думаю, что это "правильно", но работает: DataGrid.dataProvider = DataGrid.dataProvider;


Последний раз редактировалось zorexundra; 18.01.2011 в 11:57.
Старый 19.01.2011, 11:38
Lexxx_HU вне форума Посмотреть профиль Отправить личное сообщение для Lexxx_HU Найти все сообщения от Lexxx_HU
  № 3  
Ответить с цитированием
Lexxx_HU

Регистрация: Oct 2010
Сообщений: 67
Цитата:
Необходимо чтобы после клика нельзя было кликнуть по глазу опять. Пробовал this.visual = false и this.enabled = false, но кнопка становится только замутненной, при этом только со второго клика (для первой кнопки, потом с остальными нормально).

Кроме того, при прокрутке большого списка, оказывается, что каким-то образом отключаются и другие рендереры ниже.
насколько мне известно так не пройдет, при прокрутке датагрид снова перерисовывается на основе массива аррейколекшен в датапроавайдер, вы же меняете текущее состояние, может получится так что вы допустим прокрутите вниз, потом снова вверх и у вас снова будет исходное состояние, предлагаю ввести в массив еще одно поле и менять его при клике, а уже на основе этого поля рисовать кнопку

Цитата:
Кроме того, если меняется ArrayCollection который является датапровайдером, то это никак не влияет на ренедереры и они остаются недоступными. Как их обновить при изменениях массива?
датагрид меняет сове состояние в нескольких случаях, при добавлении элемента в массиве, при удалении, или при прокрутке. если вы изменили какое значение в массиве и хотите чтоб оно обновилось, сделайте у массива .refresh()

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Цитата:
5. Не думаю, что это "правильно", но работает: DataGrid.dataProvider = DataGrid.dataProvider;
Цитата:
если вы изменили какое значение в массиве и хотите чтоб оно обновилось, сделайте у массива .refresh()
2All, никогда так не делайте. В обоих случаях весь массив элементов будет опрошен заново. Для 2-3 записей это не существенно, но когда их n-цать получите конкретные тормоза при каждом обновлении. Элемент либо сам должен посылать событие PropertyChangeEvent, либо вы должны при обновлении свойств явно вызвать метод ArrayCollection#itemUpdated

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

блогер
Регистрация: Sep 2009
Сообщений: 2,463
Записей в блоге: 2
Спасибо всем. Пока временно не могу вернуться к проблеме и проверить ваши советы.

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

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

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


 


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


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