本帖最后由 刘超 于 2012-10-31 16:05 编辑
最近在使用EXT做项目. 在自学的过程中. 才发现EXT的文档大多数还停留在EXT3的阶段. 所以在痛苦之余. 决心发点EXT4 操作Tree的一些小例子.
因为本人也是这方面的新手和菜鸟. 所以. 对于本文内容就请高手多多给予指教. 也欢迎朋友们把对Tree的一些好的操作给贴上来. 我会更新在帖子上. 先谢谢了.
1. 追加一个节点
原先在3中. 需要一个TreeNode的节点对象. 在4中. 只需要一个直接的Object对象即可. 例如{id:3,text:"测试"}
一个节点追加子节点的方法不变,依旧是:appendChild方法.
[要追加子节点的节点].appendChild({id:3,text:"测试" });
--- 第一次缓慢更新 ----------------------------------
注意: 刚刚在CSDN上发现有人发了一个帖子说. 每次添加新节点. 总是添加在根节点上. 说出问题的原因是因为要添加子节点的节点没有展开.
-------------------------------------
2. 获得被选中的节点(第二次更新添加的内容)
在网上搜索的时候. 大家普遍都提供的是这么一种取值方法: Ext.getCmp('[你的树ID]').getSelectionModel().getSelectedNode();
但是这个方法在某些情况下有bug. 例如你要判断一个树节点是否被选中了. 如果你没有操作过这个树. 也就是说你没有点击过那个复选框的话.
它可以告诉你是否有节点被选中. 但是一旦你点击过那个复选框. 那么使用这个方法的时候. 就会把这个节点获得. 而无论你是否现在依旧选中着它.
解决这个方法其实很简单. 使用 tree对象的getChecked方法即可.
Ext.getCmp('[你的树ID]').getChecked();
3.替换一个子节点-为叶子节点追加子节点(第三次更新添加内容)
首先, 我没有找到直接把叶子节点变为非叶子节点的方法. 因此. 也正像我第一点所说的. 一个非叶子节点在添加子节点之前需要先展开. 明显.
叶子节点是"展不开"的. 所以. 我们在不考虑刷新树的情况下. 只能用点非常手段了.
我们可以过的我们想要追加子节点的叶子节点
然后使用函数.或者你可以像我一样懒得去找函数了. 直接修改data中的属性.
var cd = [你要追加子节点的叶子节点];
var pd = cd.parentNode;
cd.data.leaf = false;
cd.data.expanded = true;
pd.replaceChild(cd);
4.更改默认的Root根节点的配置(第四次更新添加的内容)
Ext.create('Ext.data.TreeStore', {
autoLoad:true,
proxy: {
type: 'ajax',
url: 要求一个能返回json数据的地址
},
root: {
id:"",
text: 'Root',
expanded: true
}
});
是不是很方便呀. 刚刚开始弄的时候它总会发一个id=root的参数.
因为使用的是Struts2.x在自动接受参数. 而本身的id是Long型的. 所以一直都在报错. 这样改一下. 就可以避免这些问题了
以上方法皆经过实际验证. 使用的EXT版本为4.1.x 缓慢更新中........
|