在用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);
}
}