PDA

Просмотр полной версии : проблема с Yahoo ASTRA Tree


Stop Black PR!
23.05.2008, 15:23
Скачал и установил компонент:
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/astra-flash/classreference/
ну и в классе 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); ругается

бред какой то