在用extjs实现一颗动态带复选框的树时,出现了一个问题。因为有的时候我要判断树的某些节点是否需要选中。所以我在
<a href="javascript:showDialog()">显示</a>
点击显示树的时候要进行判断现在出现了个问题我用 TreePanel.getNodeById('1')获取节点时,获取不到。说是空值。但是返回到客户端的json里是包含了id为‘1’de节点的而且在树面板里也显示出来了。
我测试了下:如果是一颗静态树,getNodeById()可有获取到Node对象。
动态加载数据的却不可以。。。
俺用extjs多是皮毛,估计有使用上的问题。所以来问问。说不定能解决。帮解的谢谢啦
附代码:
<input type="hidden" name="strResourceIds" id="strResourceIds" value="${strResourceIds}"/>
var dialog,treepanel; Ext.onReady(function(){ var Tree = Ext.tree; treepanel = new Tree.TreePanel({ el:'tree-div', useArrows:true,//节点使用箭头图标,默认是+号 autoScroll:true, animate:true, enableDD:true, containerScroll: true, loader: new Tree.TreeLoader({ dataUrl:'authority!tree.action?id='+document.getElementById('id').value }) }); var root = new Tree.AsyncTreeNode({ text: '选择资源', draggable:false, id:'source' }); treepanel.setRootNode(root); treepanel.on('checkchange', function(node, checked) { node.expand(); node.attributes.checked = checked; node.eachChild(function(child){ child.ui.toggleCheck(checked); child.attributes.checked = checked; child.fireEvent('checkchange', child, checked); }); }, treepanel); treepanel.render(); function onsubmit() { alert(treepanel.getNodeById('1')); dialog.hide(); } function onreset() { dialog.hide(); } dialog = new Ext.Window({ modal:true,//是否遮罩 contentEl:"dialog",//主体显示的html元素,也可以写为el:"win" width:300, height:500, autoScroll:true, title:"选择资源", closable:true, //是否有关闭按钮 closeAction:"hide", items:treepanel, buttons:[{xtype:"button",text:"确定",pressed:true,handler:onsubmit},{xtype:"button",text:"取消",pressed:true,handler:onreset}] }); }); function showDialog() { dialog.show(); var strResourceIds = document.getElementById('strResourceIds').value; if(strResourceIds == null || strResourceIds == ''){return;} var arrResourceIds = strResourceIds.slice(','); for(var i=0;i<arrResourceIds.length;i++) { var node = treepanel.getNodeById(arrResourceIds[i]); node.checkchange(node,true); } }