问题描述
这是一棵继承树,注意红色标记的地方,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=newExt.menu.Menu({items:[{text:'添加',handler:this.onInsertNode,scope:this},{text:'删除',handler:this.onDeleteNode,scope:this},{text:'修改',handler:this.onUpdateNode,scope:this}]});this.root=newExt.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:newExt.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'){varurl=this.baseUrl;varparams='cmd=getTree&id='+node.id;varmyAjax=newAjax(url,{method:'post',data:params,onComplete:function(){varmyObject=Json.evaluate(this.response.text);varchild=myObject.children;if(child!=null){for(vari=0;i<child.length;i++){varcnode=null;if(child[i].leaf=='false'){cnode=newExt.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=newExt.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'){//getnewnodeidvarnewid='';varurl=this.baseUrl;varparams='cmd=getNewid';varmyAjax=newAjax(url,{method:'post',data:params,onComplete:function(){newid=this.response.text;}});myAjax.request();var_parent=this.menu['currentNode'];_parent.leaf=false;//当添加子节点的时候,设置当前节点为非叶子节点var_node=newExt.tree.AsyncTreeNode({text:_text,leaf:true,id:newid});varpreviousSibling=_node.previousSibling;varpreviousNote='';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();}}});
解决方案
解决方案二:
不需要this吧
解决方案三:
引用1楼liuxinhongxin的回复:
不需要this吧
不用this.会提示找不到对象
解决方案四:
没人知道吗?神啊,快救救我吧
解决方案五:
我是一个笨菜,我也遇见这个问题了,解决了,她这段代码我没有仔细的看,我把我遇到的问题说下,就是在你的组件。js文件里面的FN就是你调用的方法找不到,或者没有定义或者,你定义的有问题,就会报这样一个错!