Я использовал этот код для навигации по компоненту дерева, но у меня есть одна проблема.
Если я нажимаю на «папку» или ветвь (по указанному имени), она открывается нормально и закрывает другие открытые папки / ветви, у которых есть такой же родитель.
НО, если я нажму на маленькую стрелочку впереди, я получу ошибку.
<mx:Tree id="treeView" x="0" y="0" width="100%" height="100%"
itemRenderer="components.CustomTreeItemRenderer"
paddingBottom="2" showRoot="true"
itemClick="treeItemClick(event)"
itemOpen="treeItemOpen(event)" />
public function treeItemOpen(event:Event):void {
var a:Array=openParent(event.currentTarget.selectedItem, [event.currentTarget.selectedItem]);
if(a) treeView.openItems = a;
}
public function openParent(o:Object,a:Array):Array{
if( o.parent()){
a.push(o.parent());
a=openParent(o.parent(),a);
}
return a;
}
Это сообщение об ошибке, которое я получаю:
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at Test_tree_001/openParent()[D:\Flash Builder - Workspace\vCog Workspace\vCog Flash 14-12-2011 - SWF\src\Test_tree_001.mxml:212]
at Test_tree_001/treeItemOpen()[D:\Flash Builder - Workspace\vCog Workspace\vCog Flash 14-12-2011 - SWF\src\Test_tree_001.mxml:207]
at Test_tree_001/__treeView_itemOpen()[D:\Flash Builder - Workspace\vCog Workspace\vCog Flash 14-12-2011 - SWF\src\Test_tree_001.mxml:705]
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at mx.core::UIComponent/dispatchEvent()[E:\dev\hero_private\frameworks\projects\framework\src\mx\core\UIComponent.as:13128]
at mx.controls::Tree/http://www.adobe.com/2006/flex/mx/internal::dispatchTreeEvent()[E:\dev\hero_private\frameworks\projects\mx\src\mx\controls\Tree.as:3551]
at mx.controls::Tree/http://www.adobe.com/2006/flex/mx/internal::onTweenEnd()[E:\dev\hero_private\frameworks\projects\mx\src\mx\controls\Tree.as:2381]
at mx.effects::Tween/endTween()[E:\dev\hero_private\frameworks\projects\framework\src\mx\effects\Tween.as:566]
at mx.effects::Tween/http://www.adobe.com/2006/flex/mx/internal::doInterval()[E:\dev\hero_private\frameworks\projects\framework\src\mx\effects\Tween.as:607]
at mx.effects::Tween$/timerHandler()[E:\dev\hero_private\frameworks\projects\framework\src\mx\effects\Tween.as:191]
at flash.utils::Timer/_timerDispatch()
at flash.utils::Timer/tick()
EDIT
У меня тоже есть этот код, который открывает ветку, если я нажимаю на текст.
Почему-то я все еще получаю ошибки с новым кодом.
if (treeView.dataDescriptor.isBranch(selectedItem)){
trace("isBranch: Triggered in treeItemClick!");
treeView.expandItem(selectedItem,!treeView.isItemOpen(selectedItem),false,true);
}
Это ошибка, которую я получаю с новым кодом:
TypeError: Error #1010: A term is undefined and has no properties.
at Test_tree_001/treeItemClick()[D:\Flash Builder - Workspace\vCog Workspace\vCog Flash 14-12-2011 - SWF\src\Test_tree_001.mxml:411]
at Test_tree_001/__treeView_itemClick()[D:\Flash Builder - Workspace\vCog Workspace\vCog Flash 14-12-2011 - SWF\src\Test_tree_001.mxml:734]
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at mx.core::UIComponent/dispatchEvent()[E:\dev\hero_private\frameworks\projects\framework\src\mx\core\UIComponent.as:13128]
at mx.controls.listClasses::ListBase/mouseClickHandler()[E:\dev\hero_private\frameworks\projects\mx\src\mx\controls\listClasses\ListBase.as:10328]
at mx.controls::Tree/mouseClickHandler()[E:\dev\hero_private\frameworks\projects\mx\src\mx\controls\Tree.as:3129]