Просмотр полной версии : проблема с 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" и поместить его в корень
но это кривое решение, хотелось бы нормальное
можно разобрать xml и листья вставить вручную, через Tree.addItem()
Stop Black PR!
24.05.2008, 03:58
XML наверное нет смысла руками ковырять, косяк не в нем, а в самом дереве
там ещё есть
addChildNodeAt(childNode:TNode, index:int):void
у класса RootNode,
но не очень понятно как это использовать
никаких нормальных примеров не прилагается в документации, кроме совсем очевидных
вам приходилось эту штуку использовать?
>>XML наверное нет смысла руками ковырять, косяк не в нем, а в самом дереве
дело хозяйское..
в этой ситуации похоже тока два выхода:
-формировать дерево 'вручную': не вижу особых проблем создать дерево в цикле, addItem() нормально съедает листья, проверил
-править яховские (и скорее всего и адобовские классы: астровские компонеты наследуются от CS3-шного набора), я бы не стал этого делать, даже если поборешь баг у себя, нигде больше твой код работать не будет
Stop Black PR!
25.05.2008, 01:16
ок, понял
т.е. надо вместо того, чтобы задавать XML и пихать его как датапровайдер использовать добавление листьев напрямую. НО у Tree нет метода addItem
http://developer.yahoo.com/flash/astra-flash/classreference/
ну и в классе Tree пошарился, нет таких методов
можете привести кусок кода с addItem, если это не сильно сложно?
как вариант: валидную структуру скармливаем через 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); ругается
бред какой то
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.