Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   Блин, с деревом в Flexe явно не все впорядке, или я чего-то не понимаю.... (http://www.flasher.ru/forum/showthread.php?t=87866)

Alexcid 13.11.2006 14:01

Блин, с деревом в Flexe явно не все впорядке, или я чего-то не понимаю....
 
Всем привет, суть проблемы такова, у меня есть дерево, заполняеться оно при помощи 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

Цитата:

Сообщение от Alexcid
Потом у меня трабл, когда происходит 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
А можешь выложить код который бы работал локально без сервисов... а то пакейджов нехватает


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

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