Показать сообщение отдельно
Старый 11.02.2013, 14:25
irigm вне форума Посмотреть профиль Отправить личное сообщение для irigm Найти все сообщения от irigm
  № 1  
Ответить с цитированием
irigm

Регистрация: Jul 2012
Сообщений: 15
По умолчанию AdvancedDataGrid глючит если после добавления элемента вызывать expandAll

Глючит тем что свойства не изменяют значения кроме первых 2х. Если нажать на последний элемент дата в посл столбце не измениться. Если экспанты убрать всё нормально работает. Пробовал callLater(adgObjects.expandAll) почти не помогает глючит не на всех элементах а только на некоторых. Обнаружил на своём проекте когда подгружал дерево из сети. Как побороть?

Вот урезанный пример:
Код AS3:
<?xml version="1.0" encoding="utf-8"?>
<s:Application 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="671" height="520" minWidth="955" minHeight="600">
 
	<fx:Script>
		<![CDATA[
			import mx.collections.HierarchicalData;
			import mx.events.ListEvent;
			import mx.formatters.DateFormatter;
 
 
			public var n1:XMLTreeNode=null;
			public var n2:XMLTreeNode=null;
			public var n3:XMLTreeNode=null;
			public var n4:XMLTreeNode=null;
			public var n5:XMLTreeNode=null;
 
			protected function btnTest1_clickHandler(event:MouseEvent):void
			{
				n1 = new XMLTreeNode();
				n1.label = "txt1";
 
				myHierarchy.source = n1;			
 
				n2 = new XMLTreeNode();
				n2.label = "txt2";
				n1.children = new Array();
				n1.children.push(n2);
 
				adgObjects.expandAll();
 
				n3 = new XMLTreeNode();
				n3.label = "txt3";
				n2.children.push(n3);
 
				adgObjects.expandAll();
 
				n4 = new XMLTreeNode();
				n4.label = "txt3";
				n1.children.push(n4);
 
				adgObjects.expandAll();
			}
 
			protected function adgObjects_itemClickHandler(event:ListEvent):void
			{
				var tn:XMLTreeNode=event.currentTarget.selectedItem;
 
				//Тестирование обновления значений
				var dateS:Date = new Date();			
				var dateFormatter:DateFormatter = new DateFormatter();
				dateFormatter.formatString = 'JJ:NN:SS DD.MM.YYYY';
				tn.date = dateFormatter.format(dateS);
			}
 
		]]>
	</fx:Script>
 
	<fx:Declarations>
		<!-- Разместить невизуальные элементы (например, службы или объекты значений) -->
	</fx:Declarations>
 
	<mx:AdvancedDataGrid id="adgObjects" x="32" y="29" width="485" height="458"
						 designViewDataType="tree" itemClick="adgObjects_itemClickHandler(event)"
						 variableRowHeight="true">
		<mx:dataProvider>
			<mx:HierarchicalData id="myHierarchy" childrenField="children"/>
		</mx:dataProvider>
		<mx:columns>
			<mx:AdvancedDataGridColumn dataField="label" headerText="Объект"
									   sortable="false"/>
			<mx:AdvancedDataGridColumn width="70" dataField="value"
									   headerText="Знач." sortable="false"/>
			<mx:AdvancedDataGridColumn width="130" dataField="date" headerText="Дата"
									   sortable="false"/>
		</mx:columns>
	</mx:AdvancedDataGrid>
	<s:Button id="btnTest1" x="528" y="29" width="122" height="59" label="Создать"
			  click="btnTest1_clickHandler(event)"/>
</s:Application>
Узел:
Код AS3:
package
{
	import flash.events.EventDispatcher;
	import flash.events.IEventDispatcher;
 
	dynamic public class XMLTreeNode extends EventDispatcher
	{
		[Bindable]
		public var selected:Boolean;
		[Bindable]
		public var checked :int;
		[Bindable]
		public var icoid:int;
		[Bindable]
		public var label:String; 
		[Bindable]
		public var value:String;
		[Bindable]
		public var date:String;
		[Bindable]
		public var children:Array;
 
 
 
		public function XMLTreeNode(target:IEventDispatcher=null)
		{
			super(target);
 
			selected = false;
			checked = 0;
			icoid = 0;
			label = "";
			value = "";
			date = "";
			children = new Array();
		}
	}
}
Добавлено через 18 часов 13 минут
В качестве заглушки пришлось таймер добавить, чтоб дерево каждую секунду обновлялось.