tree 动态改变root

我有棵带checkbox的tree,还有一个下来框,选择不同的值时,tree的根节点随之变化,
tree的loader是一样的 我试过改变根节点 再reload下:
var node = new Ext.tree.AsyncTreeNode({
id:"products",
text:"产品",
draggable:false
});
tree.setRootNode(node);

tree.getRootNode().reload();

tree.getRootNode().expand();
没有成功,
但是alert(tree.getRootNode().id);
是可以得到 products;
各位高人 有做个这种东西的吗?
怎么实现
[b]问题补充:[/b]
已经解决了 主要还是因为AsyncTreeNode有两个属性 一个是loading 一个是loaded;
我在测试的时候是直接在render后就立马执行 换根
loading还是为true 所以无法展开
最后解决:
var timer;
var f = function(){
if(tree.getRootNode().loaded){ // done loading
clearInterval(timer);
tree.getRootNode().attributes.id = '';
tree.getRootNode().reload();
}
}.createDelegate(this);
timer = setInterval(f, 200);

不过还是很感谢你
有机会多交流。。
多想你学习

本地测试过了:

[code="java"] var tree = new Tree.TreePanel({
useArrows: true,
autoScroll: true,
animate: true,
enableDD: true,
containerScroll: true,
border: false,
// auto create TreeLoader
dataUrl: 'get-nodes.php',

    root: {
        nodeType: 'async',
        text: 'Ext JS',
        draggable: false,
        id: 'src'
    },
    listeners:{
      'click':function(node,e){
        if(node!=tree.getRootNode()){
          tree.setRootNode({
                    nodeType: 'async',
                    text: node.text,
                    draggable: false,
                    id: node.id
                });
          tree.getRootNode().reload();
        }
      }
    }
});[/code]

进一步优化下:

[code="java"]listeners:{
'click':function(node,e){
if(node!=tree.getRootNode()){
var newNodeCfg = {
nodeType: 'async'
};
Ext.applyIf(newNodeCfg,node.attributes);
tree.setRootNode(newNodeCfg);
tree.getRootNode().reload();
}
}
}[/code]

怎么样,解决了吧?