PDA

Просмотр полной версии : Блин, с деревом в Flexe явно не все впорядке, или я чего-то не понимаю....


Alexcid
13.11.2006, 14:01
Всем привет, суть проблемы такова, у меня есть дерево, заполняеться оно при помощи XML, т.е. я загружаю вначале из базы ветки первого уровня, по мере открытия веток, данные подгружаются их базы динамически, т.е. я к существующему XML добавляю новые nodes, но! Потом у меня трабл, когда происходит Open какой нить ветки дерева, все нормально, подгружаются вложенные в эту ветку childs, а когда происходит скролл, они либо исчезают, либо перепрыгивают к другой node, вообщем полный бред.
Вопрос как с этим бороться??? Скажу сразу dataProvider у меня приводится к XMLListCollection как и сказано в helpe, пробовал даже делать дереву принудительный invalidateList() И invalidateNow().:mad:

Alexcid
13.11.2006, 15:25
<?xml version="1.0" encoding="utf-8"?>
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" initialize="initCatalog()">
<mx:Metadata>
[Event(name="categorySelect", type="com.oms.events.CatalogEvent")]
</mx:Metadata>
<mx:Script>
<![CDATA[
import com.oms.events.CatalogEvent;
import mx.events.*;
import flash.events.*;
import com.oms.services.*;
import mx.rpc.events.ResultEvent;
import mx.managers.CursorManager;
import mx.controls.Alert;

[Bindable]
[Embed(source="Assets.swf", symbol="TreeNodeIcon")]
public var fileIcon:Class;

[Bindable]
[Embed(source="Assets.swf", symbol="TreeFolderOpen")]
public var folderIcon:Class;

[Bindable]
[@Embed('/assets/indicator.gif')]
public var waitIcon:Class;

private function selectIcon(item:Object):Class {
if(item.@directory == 0)
return fileIcon;
else if(item.@directory == 1)
return folderIcon;
else if(item.@directory == 2)
return waitIcon;
else return fileIcon;
}

[Bindable]
public var Catalogs:XML;

[Bindable]
private var ProductsByCategory:XML;

private var CategoryId:int;

private function initCatalog():void {
new Catalog().getCatalog(onResult,0);
}

private function onResult(event:ResultEvent):void {
Catalogs = XML(ResultEvent(event).result);
CursorManager.removeBusyCursor();
}

private function changeEvt(event:Event):void {
if(event.currentTarget.selectedItem != null) {
dispatchEvent(new CatalogEvent(event.currentTarget.selectedItem.@id));
}
}

private function itemOpenEvt(event:TreeEvent):void {
CategoryId = event.item.@id;
new Catalog().getCatalog(onResult2,CategoryId);
}

private function onResult2(event:ResultEvent):void {
//Alert.show(Catalogs.category.(@id==CategoryId).@label);
Catalogs.descendants("category").(@id==CategoryId).replace("*",
<category id="-1" directory="2"/>);
var new_nodes:XML = XML(ResultEvent(event).result);
//var len:int = new_nodes.category.length();
var i:int = 1;
for each (var new_node:XML in new_nodes.category) {
if(i==1) {
Catalogs.descendants("category").(@id==CategoryId).replace("*",new_node);
i++;
continue;
}
Catalogs.descendants("category").(@id==CategoryId).appendChild(new_node);
}
CursorManager.removeBusyCursor();
catTree.invalidateList();
}
]]>
</mx:Script>

<mx:Tree id="catTree"
labelField="@label"
showRoot="false"
dataProvider="{Catalogs}"
iconFunction="selectIcon"
doubleClickEnabled="true"
width="100%"
height="100%"
dragEnabled="true"
dragMoveEnabled="true"
dropEnabled="true"
itemOpen="itemOpenEvt(event);"
change="changeEvt(event);"
doubleClick="catTree.expandItem(catTree.selectedItem, !catTree.isItemOpen(catTree.selectedItem), true)"
initialize="initCatalog()"/>
</mx:VBox>

Builder
15.11.2006, 16:04
Потом у меня трабл, когда происходит Open какой нить ветки дерева, все нормально, подгружаются вложенные в эту ветку childs, а когда происходит скролл, они либо исчезают, либо перепрыгивают к другой node, вообщем полный бред.
Вопрос как с этим бороться??? Скажу сразу dataProvider у меня приводится к XMLListCollection как и сказано в helpe, пробовал даже делать дереву принудительный invalidateList() И invalidateNow().:mad:

где исчезают ? в дереве или в самом XML ? И зачем каждый раз при открытии ветки запрашивать XML ? Можно же кешировать.

__i
22.11.2006, 15:45
Да, замечен накой глючок за деревом, но пока его не искал и не лечил, за не надобностью. Ждем пока припечет %)

ex.image
30.11.2006, 01:56
2 Alexcid
А можешь выложить код который бы работал локально без сервисов... а то пакейджов нехватает