zhaohanjiangit
zhaohanjiangit
2009-12-17 14:34
浏览 239

extjs动态树问题

在用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);
    }
}
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • zhoujuan520
    zhoujuan520 2009-12-19 22:43
    已采纳

    源码我就不看你的了.大概的问题原因所在我已经很清除了.见多了.

    [quote]我测试了下:如果是一颗静态树,getNodeById()可有获取到Node对象。

    动态加载数据的却不可以。。。[/quote]

    你说静态的就没有问题,那是因为静态的数据已经保证已经加载了,而且已经创建了Dom了.

    而动态的为什么提示获取不到对象,就是相反咯.你要获得的对象还没有生成撒

    你可以换个方式测试一下,设置一个按钮,按钮代码中执行你要获得节点的方法,等树的数据加载完毕后,你点按钮看看.保证能获得:)

    点赞 评论

相关推荐