Ext.tree.TreePanel 问题

大家好。。我有个Tree问题请教一下。不知道 为什么老是报undefined
,那个this.addTreeWin.show() 也是报 this.addTreeWin is undefined,怎么解决呢?

[img]http://dl.iteye.com/upload/attachment/362341/21e5c4d8-5496-3ae9-bd09-25fc65f3e53f.jpg[/img]

代码如下:
MenuTree=Ext.extend(Ext.tree.TreePanel,{
tree_root:null,
tree_menu:null,
addTreeWin:null,
selectNode:null,//当前选择的节点
tabPanel:null,
constructor:function(_tabPanel){
this.tabPanel=_tabPanel;
this.addTreeWin=new addTreeNewWin();
this.addTreeWin.on("addSuccess",function(){
this.tree_root.reload();
this.addTreeWin.hide();
},this);
this.tree_root=new Ext.tree.AsyncTreeNode({
text : '系统配置',
draggable:false,
id:'0'
});
this.tree_menu = new Ext.menu.Menu([
{
text : "添加子树栏目",
iconCls : 'addIcon',// 右键名称前的小图片
handler : function() {
var parentCode = this.selectNode.id;
var parentName = this.selectNode.text;
alert(parentCode+"--"+parentName);
var menuParent = new menu({
parentCode : parentCode,
parentName : parentName
});
this.addTreeWin.show();
}
}, {
text : "刷新树栏目",
iconCls : 'refresh',
handler : function() {
/ ar tree = Ext.getCmp('naviTree');
//tree.root.reload();// 树的重新加载
var tree = Ext.getCmp('naviTree');
tree.root.reload();// 树的重新加载
tree.root.expand(false, false);
}
}]
);
MenuTree.superclass.constructor.call(this,{
id : 'naviTree',
useArrows:true,
animate:true,
autoScroll:true,
containerScroll: true,//是否支持滚动条
deferHeight:true,
split:false,

rootVisible:true,//是否显示根节点
collapseMode:'mini',//在分割线处出现按钮
collapsible: true,
root:this.tree_root,
rootVisible:false,
border:false,
loader:new Ext.tree.TreeLoader({

dataUrl : '../manager/menu!menuAllListInfo.demo'
}),
listeners:{
"contextmenu":{
fn:this.show_menu,
scope:this
}
}
});
this.addEvents("refreshTree");
},
show_menu : function(_node, _e) {
this.selectNode = _node;

//alert(node.parentNode+"----selectNode--"+this.selectNode.id+"-text-"+this.selectNode.text+"-parentNode.id-"+this.selectNode.parentNode.id+"-parentNode.text-"+this.selectNode.parentNode.text);
if (_node.isLeaf())// 子栏目右键工具栏
{
this.tree_menu.showAt(_e.getXY());
} else if (!_node.isLeaf() && _node.parentNode != null)// 树栏目右键工具栏
{
this.tree_menu.showAt(_e.getXY());
} else if (!_node.isLeaf() && _node.parentNode == null)// 树ROOT栏目工具栏
{
this.tree_menu.showAt(_e.getXY());
}

}
});

1个回答

addTreeWin:null,
selectNode:null

想通过属性配置这两个对象到treepanel中去需要重新扩展treepanel,直接写在那就想tree自己识别出来不大现实。我在你代码里也没看到扩展treepanel将这两个组件加入新的treepanel组件的方法。所以报undefined比较正常。

通常的用法是在外面声明这两个组件,然后在tree的动作执行方法中调用这些组件。

例如:
var leftClickSeletednode=new Ext.tree.AsyncTreeNode({
id:'leftclickselectednode'
});
然后监听click事件,将监听click时间中的node参数,赋leftClickSeletednode。

对于window,也类似,在外面生命一个window,然后在需要处理的弹出window的事件中调用它。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!