FLEX - 打开树枝..?
我一直在使用这段代码来帮助在我的树组件中进行导航,但我确实遇到了一个问题。
如果我单击“文件夹”或分支(在列出的名称处),它会正常打开,并关闭具有相同父级的其他打开的文件夹/分支。
但是,如果我单击前面的小箭头,则会出现错误。
<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()
编辑
我也有此代码,如果我单击文本,它将打开分支。 不知怎的,我仍然收到新代码的错误。
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]
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您收到该错误消息是因为传递给
openParent
方法的对象o
为 null。由于没有传递有效对象,Flex 无法计算parent
属性。我最好的猜测是,因为单击箭头时没有
selectedItem
,因此event.currentTarget.selectedItem
将始终为null
。您必须找到另一种方法来识别选择了哪个节点。我快速进行了一些谷歌搜索,发现这篇文章。该文章的最后评论提到:
希望这可以帮助您朝着正确的方向开始。
You're getting that error message because the Object
o
that's getting passed to theopenParent
method is null. Because there's no valid object getting passed Flex can't evaluate theparent
property.My best guess is because when clicking on the arrow there is no
selectedItem
soevent.currentTarget.selectedItem
will always benull
. You'll have to find another way of identifying which node was selected.I did some quick Googling and found this article. The last comment in that article mentioned:
Hopefully this helps get you started in the right direction.