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

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

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

Регистрация: Jul 2009
Сообщений: 240
Записей в блоге: 1
По умолчанию DataGrid ItemRenderer переменной высоты. Функц measureHeightOfItems мешает скроллбар

Конечная задача - получение таблицы, высота которой такова, что нет скроллбара. (но и не больше)

В этой таблице у меня свой ItemRendeder, который тоже разной высоты - в зависимости от кол-ва текста.

Проблема состоит в том, что когда я вызываю measureHeightOfItems(), то (предположительно) он считает как будто скроллбар есть, даже если verticalScrollPolice=off и изначальная высота таблицы больше, чем требуется.
При этом высота контента чуток больше получается т.к. скроллбар влияет на ширину контента.
Дальше я присваиваю таблице подсчитанное свойство height При этом высота таблицы уже такая получается, что скроллбар не нужен, а раз так, то контент в таблице шире, и поэтому его высота меньше. И таблица получается внизу с пустым местом.

я сделал в ItemRendeder распечатку высоты и вижу, что когда вызывается measureHeightOfItems(), то высота у проблемного элемента одна. А когда я таблице присваиваю свойство height и начинается ее рендер, то на распечатке видно, что высота уже другая.

это фрагмент itemRenderer-а
Код AS3:
<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml"
	verticalScrollPolicy="off" horizontalScrollPolicy="off"
	height="{ measureH(data) }" 
	width="400"  borderStyle="solid">
<mx:Script>
	<![CDATA[
 
	private function measureH(data:Object):int{
		comment.executeBindings(true);//comment - это TextArea
		comment.validateNow();
		comment.height=10+comment.textHeight;
		var h:int=((26+comment.height)>110)? (30+comment.height):110;
		tr.add("ir h="+h);//это вывод в мою консоль всего-лишь
		return h;
	}
а так я делаю с таблицей:

Код AS3:
	private function onCommentsLoadOk():void{
		var myxml:XML = commentsProvider.lastResult as XML;
		var cmt:comment_m;
		var source:XML;
		comments=new ArrayCollection();
		for(var i:int=0; i<myxml.comment.length(); i++){
			cmt = new comment_m();
			source=myxml.comment[i];
			cmt.setDatas(source);
			comments.addItemAt( (cmt as Object),0 );
		}
		commentsTable.executeBindings(true);	
		commentsTable.validateNow();		
		this.callLater(setHeights);
}
 
	private function setHeights():void{
		tr.add("start measuring");//это вывод в мою консоль
		var h:int=commentsTable.measureHeightOfItems(0,comments.length)+1;
		tr.add("h="+h+" l="+comments.length);
		var neededH:int=(h>3000) ? 3000:h;
		tr.add("needh="+neededH);
		if (commentsTable.height != neededH)
			commentsTable.height=neededH;
		if (h>3000)
			commentsTable.verticalScrollPolicy='on';
		else
			commentsTable.verticalScrollPolicy='off';
	}
 
...
//в таблице height заведомо большое, и скроллбар выключен. Не помогает.
<mx:DataGrid id="commentsTable"
	width="100%"
	dataProvider="{comments}"							
	variableRowHeight="true" wordWrap="true"
	height="4000" verticalScrollPolicy="off" 
	headerHeight="1">
Добавлено через 52 часа 15 минут
Я нашел в чем было дело. скроллбар не при чем. У меня в itemRenderer comment задано было так:

Код AS3:
<mx:TextArea top="47" 
		text="{data.text}" verticalScrollPolicy="off" horizontalScrollPolicy="off"
		left="110" right="5"
		id="comment" editable="false" wordWrap="true" width="443"/>
Проблема заключалась в строчках left="110" right="5". При пересчете comment.textHeight оно их не валидировало, поэтому ширина comments была не той, которая нужна. Заменил эти строчки на правильное значение witdh - заработало.

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

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

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


 


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


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