ext 树 排序

想把拖拽后排好的树的顺序保存下来,加一个按钮,取到json串。可是不知道怎样取到,急呀
menuTree:new Ext.tree.TreePanel({
title:'局所列表',
region:'west',
id:'extExample-tree',
autoScroll:true,
enableDD:true,//是否支持拖拽效果false
containerScroll: true,//是否支持滚动条
split:true,
width: 180,
minSize: 175,
maxSize: 300,
rootVisible:false,//是否显示跟节点
//collapseMode:'mini',//在分割线处出现按钮
collapsible: true,
margins:'0 0 5 5',
loader:new Ext.tree.TreeLoader({

dataUrl:'data.jsp'
}),
tools:[{
id:'refresh',
handler:function(){
var tree = Ext.getCmp('extExample-tree');
tree.root.reload();
}
}]
}),
/*nodedrop事件的实现函数,可以用ajax向后台传送数据。*/
treeNodeDrop:function(e){
var curTree = e.tree;//得到当前的tree

    var tmpDropNode = e.dropNode;
    var tmpDropedNode = e.target;
    var dropType = e.point;     
    alert(dropType)//dropType:above,append,below
    if(dropType=="append")
    {
    //进度提示
            Ext.MessageBox.show({
            title:"正在保存",
            msg:" ",
            progress:true,
            width:300,
            wait:true,
            waitConfig:{interval:600},//0.6s进度条自动加载一定长度
            closable:true
        });
    Ext.Ajax.request({
        url:'dragtree.jsp',
        method:'post',
        params:{begin:tmpDropNode.id,end:tmpDropedNode.id,type:dropType},
        success: function(response, option) {
            Ext.MessageBox.hide();
            var result = response.responseText;
            Ext.MessageBox.alert("系统提示",result); 
        },

        failure: function(response, option) {
            //nodeEdited.setText(oldValue);//如果失败则将改过的节点恢复原状
            Ext.MessageBox.hide();
            Ext.MessageBox.alert("系统提示","Error"); 
            //alert("异步通讯失败,请重试或与管理员联系!");
        }
    });
    }//end if (dropType=="append")
    else {Ext.MessageBox.alert("系统提示"," 不支持排序功能,只能拖到'目标文件夹位置'实现移动功能"); 
          var tree = Ext.getCmp('extExample-tree');
         tree.root.reload();
          }
}

先要展开所有的树节点,然后获取。

下面例子就是在这个树展开完毕之后就会把所有节点放到一个div里面,

tree.js代码:
[code="javascript"]var root = null;;
Ext.onReady(function() {
root = new Ext.tree.TreeNode({
id : '0',
text : 'Root',
leaf : false,
checked: true
});
var level1 = new Ext.tree.TreeNode({
id : '01',
leaf : false,
text : 'Level 1 -1',
checked: true
});
level1.appendChild(new Ext.tree.TreeNode({
id : '011',
leaf : false,
text : 'Level 2 -1',
checked: true
}));
level1.appendChild(new Ext.tree.TreeNode({
id : '012',
leaf : false,
text : 'Level 2 -2',
checked: true
}));
level1.appendChild(new Ext.tree.TreeNode({
id : '013',
leaf : false,
text : 'Level 2 -3',
checked: false
}));
root.appendChild(level1);
root.appendChild(new Ext.tree.TreeNode({
id : '02',
leaf : true,
text : 'Level 1 -2',
checked: true
}));

var tree = new Ext.tree.TreePanel({
    applyTo : 'tree-ct',
    width : 568,
    height : 300,
    checkModel : 'cascade',
    onlyLeafCheckable : true,
    animate : false,
    rootVisible : true,
    autoScroll : true,
    root : root
});

tree.getRootNode().expand();

getSelectedItems("Root",root);

});

//从根节点遍历整个tree, 把叶子列出来放在一个div里面,
function getSelectedItems(parentPath, _root){
if(_root){
var nodes = _root.childNodes;
if(nodes.length==0){
return;
}
for(var i=0; i<nodes.length; i++){
var div = document.createElement("div");
div.appendChild(document.createTextNode(parentPath + "\" + nodes[i].text));
document.getElementById("selectedItems").appendChild(div);
if(!nodes[i].leaf){
//递归调用自己,以实现遍历
getSelectedItems(parentPath+ "\" + nodes[i].text, nodes[i]);
}
}
}
}

[/code]
jsp代码:
[code="jsp"]


starting page
<库文件需要你自己填上>
<script type="text/javascript">

</script>

<style type="text/css">

</style>



[/code]

不知道你想要json串是个怎么样的格式,不过Ext的每个TreeNode结点都有firstChild、nextSibling、parentNode这几个属性,遍历一遍结点很容易啊