想把拖拽后排好的树的顺序保存下来,加一个按钮,取到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"]
<script type="text/javascript">
</script>
<style type="text/css">
</style>
[/code]
不知道你想要json串是个怎么样的格式,不过Ext的每个TreeNode结点都有firstChild、nextSibling、parentNode这几个属性,遍历一遍结点很容易啊