这是一棵继承树,注意红色标记的地方,root可以调用到gettree函数,为什么cnode节点不能调用gettree啊?老是提示fireFn为空或者不存在?请高手指点啊。。
Ext.namespace('Ext.darkness');Ext.darkness.DynamicTree = Ext.extend(Ext.tree.TreePanel , {
menu: null,
   baseUrl: null,
   root:null, 
  
constructor:function(){
this.menu = new Ext.menu.Menu({
items:[{
text:'添加',
handler:this.onInsertNode,
scope:this
},{
text:'删除',
handler:this.onDeleteNode,
scope:this
},{
text:'修改',
handler:this.onUpdateNode,
scope:this
}]
}) ; this.root=new Ext.tree.AsyncTreeNode({
                           text: '系部',
id:'0',
children:[{
text:'loading',
iconCls: 'loading',
leaf:true
}],
listeners:{
'expand':{
fn:this.gettree,
scope:this
}
}
              });
    
Ext.darkness.DynamicTree.superclass.constructor.call(this , {
width:200,
height:600,
split:true,
collapseMode:'mini',
collapsible: true,
lines:true,
autoScroll:true,
enableDD:true,
loader: new Ext.tree.TreeLoader(),
root:this.root,
listeners:{
'contextmenu':{
fn:this.onContextmenu,
scope:this
},
'click':{
fn:this.treeclickAction,
scope:this
},
'movenode':{
fn:this.movenode,
scope:this
}
}

}) ;
},

movenode:function(){
alert('movenode');
},

treeclickAction:function(node,event){
alert('treeclickAction');
}, gettree:function(node){

if(node.firstChild.text=='loading'){
var url = this.baseUrl;
var params ='cmd=getTree&id='+node.id;
var myAjax = new Ajax(url ,{method:'post',data:params,onComplete:function(){
var myObject = Json.evaluate(this.response.text);
var child=myObject.children;
if(child!=null){
for(var i=0;i<child.length;i++){
var cnode=null;
if(child[i].leaf=='false'){
cnode=new Ext.tree.AsyncTreeNode({
id:child[i].leibieid,
text:child[i].leibiemc,
leaf:false,
children:[{
text:'loading',
iconCls: 'loading',
leaf:true
}],
listeners:{
'expand':{
    fn:this.gettree,
scope:this
}
}
});
alert('AsyncTreeNode'+cnode.text);
}else{
cnode=new Ext.tree.TreeNode({
id:child[i].leibieid,
text:child[i].leibiemc,
leaf:true
});
alert('TreeNode'+cnode.text);
}
node.appendChild(cnode);
}
}

}
});
myAjax.request();//发送请求

}
},

beforemove:function(tree,node,oldParent,newParent,iIndex){
if(node.nextSibling!=null){
oldNextNote=node.nextSibling.id;
alert('oldNextNote:'+oldNextNote+node.nextSibling.text);
}
if(node.previousSibling!=null){
oldPreviousNote=node.previousSibling.id;
alert('oldPreviousNote:'+oldPreviousNote+node.previousSibling.text);

},

onContextmenu:function(_node , _e){
alert('onContextmenu:function');
this.menu['currentNode'] = _node ;
if(this.menu['currentNode'].id == '0') {//禁用删除操作
this.menu.items.itemAt(1).setDisabled(true) ;
} else {
this.menu.items.itemAt(1).setDisabled(false) ;
}
this.menu.showAt(_e.getXY()) ;
}, onInsertNode:function(){
Ext.Msg.prompt('请输入新建后的名称' , '新建名称' , this.onInsertNodePrompt , this) ;
}, onDeleteNode:function(){
Ext.Msg.confirm('系统提示' , '你是否确定删除此节点?' , this.onDeleteNodeConfirm , this) ;
}, onUpdateNode:function(){
Ext.Msg.prompt('请输入修改后的名称' , '修改名称' , this.onUpdateNodePrompt , this , false , this.menu['currentNode'].text) ;
}, onUpdateNodePrompt:function(_btn , _text){
if(_btn == 'ok'){
if(this.menu['currentNode'].text != _text.trim()){//内容被修改了
this.menu['currentNode'].setText(_text) ;
Ext.Ajax.request({url: this.baseUrl + '?cmd=update' , params:{id:this.menu['currentNode'].id , text:this.menu['currentNode'].text}}) ;
}
}
}, onDeleteNodeConfirm:function(_btn){
if(_btn == 'yes'){
var _node = this.menu['currentNode'] ;
Ext.Ajax.request({url:this.baseUrl + '?cmd=delete', params:{parentId:_node.parentNode.id , id:_node.id}}) ;
_node.remove() ;
}
},

onInsertNodePrompt:function(_btn , _text){
if(_btn == 'ok'){
//get new node id
var newid='';
var url = this.baseUrl;
var params ='cmd=getNewid';
var myAjax = new Ajax(url ,{method:'post',data:params,onComplete:function(){
newid=this.response.text;
}});
myAjax.request();

var _parent = this.menu['currentNode'] ;
_parent.leaf = false ;//当添加子节点的时候,设置当前节点为非叶子节点
var _node = new Ext.tree.AsyncTreeNode({
text: _text ,
leaf:true,
id:newid
}) ;

var previousSibling=_node.previousSibling;
var previousNote='';
alert(previousSibling);
if(previousSibling!=null){
alert(previousSibling.text);
previousNote=previousSibling.id;
}
Ext.Ajax.request({
url:this.baseUrl + '?cmd=insert' , 
params:{
parentId:_parent.id , 
id:_node.id , 
previousSibling:previousNote,
text:_node.text
}
}) ;
try {
// 如果isLoaded为false,那么_parent.expand()会再次发送一次请求
// _node会重复添加
if (_parent.isLoaded()) {
_parent.appendChild(_node) ;
}
} catch (_err) {
}
_parent.expand() ;
}
}
}) ;