本站已关停,现有内容仅作科研等非赢利用途使用。特此声明。
查看: 3747|回复: 1
打印 上一主题 下一主题

EXT4 Tree的操作 缓慢更新中...

[复制链接]
跳转到指定楼层
1#
发表于 2012-10-29 15:53:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 刘超 于 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 缓慢更新中........
ChinaGDG.com
回复

使用道具 举报

2#
 楼主| 发表于 2012-10-31 16:06:58 | 只看该作者
自己的好帖子, 自己来欣赏一个吧.
ChinaGDG.com
回复 支持 反对

使用道具 举报

*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表