Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   Обновление ветки Tree (http://www.flasher.ru/forum/showthread.php?t=95287)

asuri 02.05.2007 18:42

Обновление ветки Tree
 
Имею заполненный из DataProvider-а Tree. Предположим я захотел добавить к одному из элементов дочерний объект. Сформировал для этого соответствующий кусочек XML. Как мне обновить лишь одну ветку? Только тот нод, к которому я добавил детёныша.. Как вариант - можно конечно полностью обновлять датапровайдер, но пи этом все открытые ноды закрываются, то естьприйдётся следить что у меня открыто в момент обновления, так что это наверное не лучший вариант. Подскажите плиз, кто знает, как обновить только выбранную ветку.

asuri 04.05.2007 15:29

По прежнему не могу до конца решить проблему. Теперь прост изменяю датапровайдер и присваиваю дереву. Но хочется чтоб открывались ветки, коорые были открыты передначалом редактирования.

Подскажите плиз, делаю так:
Код:

xml=XML('<root>'+MyTree.dataProvider+'</root>');
var openItems:Object=Object(MyTree.openItems);
... здесь изменяю xml ...
MyTree.dataProvider=xml.children();
MyTree.openItems=openItems

В итоге ветки не открываются, хотя openItems содержит в себе правильные ноды.

однако в следующем примере всё срабатывает и ноды открываются
Код:

var openItems:Object=Object(MyTree.openItems);
MyTree.dataProvider=MyTree.dataProvider;
MyTree.openItems=openItems

непонятно, зачем нужно это свойство, если оно срабатывает только если ничего не трогать и ничего не менять? :mad:

MaxD 04.05.2007 19:26

А с помощью MyTree.expandChildrenOf(...) не получится?

asuri 11.05.2007 20:19

да как то вот не особо получается. Я извратился и сделал так
Код:

...
MyTree.selectedItem=MyTree.selectedItem.parent();
                            xml=XML(MyTree.selectedItem);
                            number=getNumber(xml,id,table);
                            if(number!=-1){
                      xml.replace(number,"");
                            }
                           
                            xml.normalize();
...

но почему-то, если попытаться потом открыть или закрыть родительский итем, лезет ошибка

Код:

TypeError: Error #1010: A term is undefined and has no properties.
        at mx.controls::Tree/expandItem()[C:\dev\GMC\sdk\frameworks\mx\controls\Tree.as:1781]
        at mx.controls::Tree/http://www.adobe.com/2006/flex/mx/internal::expandItemHandler()[C:\dev\GMC\sdk\frameworks\mx\controls\Tree.as:3003]
        at flash.events::EventDispatcher/flash.events:EventDispatcher::dispatchEventFunction()
        at flash.events::EventDispatcher/dispatchEvent()
        at mx.controls::Tree/http://www.adobe.com/2006/flex/mx/internal::dispatchTreeEvent()[C:\dev\GMC\sdk\frameworks\mx\controls\Tree.as:2946]
        at mx.controls.treeClasses::TreeItemRenderer/mx.controls.treeClasses:TreeItemRenderer::disclosureMouseDownHandler()[C:\dev\GMC\sdk\frameworks\mx\controls\treeClasses\TreeItemRenderer.as:479]

Не знаю как от этого избавиться. Хотя конечно ошибка не вылезает если убрать строчку xml.normalize();, но в этом случае от итема остаётся иконка (

miramax 11.05.2007 21:21

asuri, используй XMLListCollection.

asuri 17.05.2007 13:00

XMLListCollection не получается, та же иерархическая структура XML-ника

miramax 17.05.2007 15:38

Чиво?
Почитай в хелпе про коллекции вообще.
Если ты что-то меняешь в объекте датаПровайдера, то об этом необходимо извещать коллекцию.

asuri 17.05.2007 16:15

Короче, никаких колекций тут навиг не надо. Вопрос решился так.

...

Код:

MyTree.selectedItem=MyTree.selectedItem.parent();
MyTree.expandItem(MyTree.selectedItem,false);

                            xml=XML(MyTree.selectedItem);
                            number=getNumber(xml,id,table);
                            if(number!=-1){
                      xml.replace(number,"");
                            }
                           
                            xml.normalize();
MyTree.expandItem(MyTree.selectedItem,true);
...

Всем отвечающим спасибо )


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

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