EXT 递归调用问题 fireFn为空或者不存在

问题描述

这是一棵继承树,注意红色标记的地方,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就是你调用的方法找不到,或者没有定义或者,你定义的有问题,就会报这样一个错!

时间: 2024-09-20 08:43:49

EXT 递归调用问题 fireFn为空或者不存在的相关文章

php递归调用删除数组空值元素的方法

  本文实例讲述了php递归调用删除数组空值元素的方法.分享给大家供大家参考.具体如下: 该函数可以删除数组里的所有空值元素,包含空字符串,空的数组等等. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 function array_remove_empty($arr){ $narr = array(); while(list($key, $val) = each($arr)){ if (is_array($val)){ $val = a

二叉树递归调用,指针的困惑

问题描述 二叉树递归调用,指针的困惑 void Tree ::creatTree(Node * & p) { T val; cin>>val; if(val=='#') p=NULL; else { p=new Node ; p->data=val; cout<leftchild< creatTree(p->leftchild); creatTree(p->rightchild); } } 我想问的是:在第一次输入非#之后,构造一个节点,给这个结点的dat

php递归调用删除数组空值元素的方法_php技巧

本文实例讲述了php递归调用删除数组空值元素的方法.分享给大家供大家参考.具体如下: 该函数可以删除数组里的所有空值元素,包含空字符串,空的数组等等. function array_remove_empty($arr){ $narr = array(); while(list($key, $val) = each($arr)){ if (is_array($val)){ $val = array_remove_empty($val); // does the result array conta

SQL Server2005杂谈(2):公用表表达式(CTE)的递归调用

本文为原创,如需转载,请注明作者和出处,谢谢! 上一篇:SQL Server2005杂谈(1):使用公用表表达式(CTE)简化嵌套SQL 先看如下一个数据表(t_tree):     上图显示了一个表中的数据,这个表有三个字段:id.node_name.parent_id.实际上,这个表中保存了一个树型结构,分三层:省.市.区.其中id表示当前省.市或区的id号.node_name表示名称.parent_id表示节点的父节点的id.     现在有一个需求,要查询出某个省下面的所有市和区(查询结

SQL Server2005杂谈(3):公用表表达式(CTE)的递归调用

 本文为原创,如需转载,请注明作者和出处,谢谢! 先看如下一个数据表(t_tree):     上图显示了一个表中的数据,这个表有三个字段:id.node_name.parent_id.实际上,这个表中保存了一个树型结构,分三层:省.市.区.其中id表示当前省.市或区的id号.node_name表示名称.parent_id表示节点的父节点的id.     现在有一个需求,要查询出某个省下面的所有市和区(查询结果包含省).如果只使用SQL语句来实现,需要使用到游标.临时表等技术.但在SQL Ser

java中父类与子类, 不同的两个类中的因为构造函数由于递归调用导致栈溢出问题

/* 对于类中对成员变量的初始化和代码块中的代码全部都挪到了构造函数中, 并且是按照java源文件的初始化顺序依次对成员变量进行初始化的,而原构造函数中的代码则移到了构造函数的最后执行 */ import static java.lang.System.out; public class PersonDemo { public static void main(String[] args) { //*********测试父类与子类之间的循环调用的问题 out.println("main1&quo

非常精妙的 PHP 递归调用 代码

  <?php // 定义 PI 一分的角度的值 define("PII", M_PI/180); // 新建图像资源,并定义其背景为 白色,前景色为 黑色 $im    = imagecreate(670,500); $white = imagecolorallocate($im, 0xFF, 0xFF, 0xFF); $g     = imagecolorallocate($im, 0x00, 0x00, 0x00); // 从下面实例化的代码可以得知,初始值 $x, $y,

php函数的递归调用

什么是函数的递归调用?就是函数自己调用自己. php文件: <?phpfunction abc($n) { if ($n > 2) { abc(--$n); } echo '$n=' . $n . "<br />";}abc(4);?> 输出结果: $n=2 $n=2 $n=3 以上是小编为您精心准备的的内容,在的博客.问答.公众号.人物.课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索php , 递归 , 文件 , 函数 , 结果 输出 函数

PHP递归调用的小技巧讲解

在PHP的实际编码中,当我们需要实现多元数组替换功能时,就会遇到PHP递归调用.那么具体的使用方式是怎样的呢?下面我们将通过一段代码示例来具体分析一下实现这以功能的方法. PHP递归调用实现多元数组替换功能代码示例: < ?php $arr = array(array("< 小刚>","< 小晓>"),"< 小飞>","< 小李>","< 小红>&qu