Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   проблема с Yahoo ASTRA Tree (http://www.flasher.ru/forum/showthread.php?t=112303)

Stop Black PR! 23.05.2008 15:23

проблема с Yahoo ASTRA Tree
 
Скачал и установил компонент:
http://developer.yahoo.com/flash/astra-flash/tree/

обнаружил неприятную особенность: в примере, в корне можно увидеть несколько подкатегорий-контейнеров:

+ Work documents
+ Personal docs
+ Photos

если в корне создать больше одного потомка-неконтейнера (т.е. листья дерева), то компонент выдает рантайм ошибки и не запускается

проблема лечится если все это содержимое засунуть в один контейнер, например "Menu" и поместить его в корень
но это кривое решение, хотелось бы нормальное

silin 23.05.2008 20:18

можно разобрать xml и листья вставить вручную, через Tree.addItem()

Stop Black PR! 24.05.2008 03:58

XML наверное нет смысла руками ковырять, косяк не в нем, а в самом дереве

там ещё есть

addChildNodeAt(childNode:TNode, index:int):void
у класса RootNode,

но не очень понятно как это использовать
никаких нормальных примеров не прилагается в документации, кроме совсем очевидных

вам приходилось эту штуку использовать?

silin 24.05.2008 21:23

>>XML наверное нет смысла руками ковырять, косяк не в нем, а в самом дереве
дело хозяйское..
в этой ситуации похоже тока два выхода:
-формировать дерево 'вручную': не вижу особых проблем создать дерево в цикле, addItem() нормально съедает листья, проверил
-править яховские (и скорее всего и адобовские классы: астровские компонеты наследуются от CS3-шного набора), я бы не стал этого делать, даже если поборешь баг у себя, нигде больше твой код работать не будет

Stop Black PR! 25.05.2008 01:16

ок, понял

т.е. надо вместо того, чтобы задавать XML и пихать его как датапровайдер использовать добавление листьев напрямую. НО у Tree нет метода addItem

http://developer.yahoo.com/flash/ast...lassreference/
ну и в классе Tree пошарился, нет таких методов

можете привести кусок кода с addItem, если это не сильно сложно?

silin 25.05.2008 03:30

как вариант: валидную структуру скармливаем через new TreeDataProvider
а одиночные листья добавляем "вручную", раз так не хочет..
(компонент д.б. в библиотеке)
Код:

import com.yahoo.astra.fl.controls.treeClasses.*;
import com.yahoo.astra.fl.controls.*;
var mytree:Tree=new Tree();
addChild(mytree);

var dataXML:XML =
<node>
        <node label="node1">
                <node label="leaf1"/>
                <node label="leaf2"/>
        </node>
</node>;
mytree.dataProvider = new TreeDataProvider(dataXML);


mytree.addItem({label:"aloneLeaf1"});
mytree.addItemAt({label:"aloneLeaf12"},0);

ps насчет "нет таких методов": Tree наследуется от List, а в нем все это есть..

Stop Black PR! 03.10.2008 08:09

в прошлый раз удалось избежать проблем, закинув все листы из корня в один контейнер «Menu»

а сейчас надо добавлять листы на лету
и я с какой то мистикой столкнулся:

делаю mytree.addItem({label:"aloneLeaf1"});
пишет что не могу преобразовать тип Object к типу TNode

хотя в доке написано, что там Object и на самом деле лист добавляется в конец списка, в корень

пытаясь избежать ошибки пишу тот тип, который требует дебагер:
Код:

var dataXML2:XML=<node>
                        <node label="Съешь ещё этих мягких французских булок">
                                <node label="Да выпей чаю">
                                        <node label="Спасибо за квалифицированную помощь"/>
                                </node>
                        </node>
                                               
                        </node>;
var pDP:TreeDataProvider=new TreeDataProvider(dataXML2);
                        var item:TNode=TNode(pDP);
                        mytree.addItem(item);

при выполнении кода выплывает:
cannot convert com.yahoo.astra.fl.controls.treeClasses::TreeDataProvider@1228d101 to com.yahoo.astra.fl.controls.treeClasses.TNode.

это он на строку
Код:

var pDP:TreeDataProvider=new TreeDataProvider(dataXML2);
ругается

бред какой то


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

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