Flex Tree не расширяется - PullRequest
       12

Flex Tree не расширяется

2 голосов
/ 09 февраля 2010

У меня есть элемент управления деревом, и после того как я уронил в него элемент (который обновляет поставщик данных), я хочу, чтобы он оставался открытым. Я пробовал много вещей, в том числе пример на этом вопросе , который я не смог заставить работать, поэтому я делаю то, что мне кажется еще более простым. Как это:

[Bindable]
public var open:Object = new Object();

private function dropItemInTree():void{
    open = myTree.openItems;
    //A bunch of code that updates the DP
    reopenTree();
}

public function reopenTree():void{
    for each(var item:XML in open){
        expandParents(item[0]);
    }
}

private function expandParents(node:XML):void {
    myTree.expandItem(node,true,false);
}

Но даже это оставляет мое дерево минимизированным. Что не так?

Ответы [ 2 ]

3 голосов
/ 11 февраля 2010

Итак, я наконец понял, что происходит.В своей функции выпадения я в основном восстанавливал весь DP.Хотя он был почти таким же, у него были бы разные UID внутри флэш-плеера, поэтому объекты в открытом var больше не имели ссылки на объекты в DP.К счастью, в моем поставщике данных XML есть поле идентификатора, поэтому я смог найти объект в восстановленном DP и, наконец, заставить работать метод expandItem.

Таким образом, моя функция повторного открытия теперь выглядит какпримерно так:

public function renderTree():void
    for each(var item:XML in open){
        myTree.expandItem(XML(MyDP..node.(@attr == item.@attr)),true);
        //forcing the type to be XML is VITAL
    }
}
1 голос
/ 09 февраля 2010

Извините, вот полное объяснение: ссылка внизу дает полное объяснение вместе с полным образцом.

Необходимо использовать событие creationComplete элемента управления Tree, а не событие initialize, потому что поставщик данных не полностью инициализирован и доступен до события creationComplete.

<mx:Tree id="tree1" ... creationComplete="initTree();" >

OR

вы также можете получить поле openItems, чтобы указать начальный открытый элемент, установив метод expandItem () для отправки события itemOpen. Это можно сделать, указав четвертый необязательный параметр метода expandItem () в true. Истинный четвертый параметр заставляет дерево отправлять событие открытия при открытии элемента. В следующем примере показано использование четвертого параметра:

XMLTree1.expandItem(MailBox.getItemAt(0), true, false, true);

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

<mx:Script>
    <![CDATA[
        import flash.events.*;
        import mx.events.*;
        import mx.controls.*;
        private function initTree():void {

            XMLTree1.expandItem(MailBox.getItemAt(0), true);
            XMLTree1.selectedIndex = 2;
        }
    ]]>
</mx:Script>

Ссылка для древовидного элемента управления: http://livedocs.adobe.com/flex/3/html/help.html?content=dpcontrols_8.html

...