Extjs4增加Tree节点级选方法,可异步级选
来源:互联网 发布:廊坊市北商网络 编辑:程序博客网 时间:2024/05/18 03:55
树的刷新常常是整颗树全部节点刷新,但有些时候我们需要只刷新某一个节点下的数据,方法很简单,在异步树中我们不难发现,第一次展开一个节点的时候是向后台获取数据的,第二次展开就不会再获取,因方法如下处理:
Ext.applyIf(Ext.data.Model.prototype,{ /* * 重载 */reload:function(){var me=this; me.set('loaded', false);me.set('expanded',false);me.expand();},/* * 添加新节点时重载 */loadNewNode:function(){var me=this;me.set("leaf",false);me.reload();}});
树的级选是很常见的操作,笔者整理后添加了异步树的级选操作,就是先展开节点再级选,代码如下:
/* * 级选 */cascadeCheck:function(checked){var me=this;me.childCheck(checked);me.parentCheck(checked);},/* * 级选并展开子节点 */cascadeCheckExpand:function(checked){var me=this;me.childCheckExpand(checked);me.parentCheck(checked);},/* * 级选子节点 */childCheck:function(checked){var me=this;me.cascadeBy(function(child) {child.set('checked', checked); });},/* * 级选子节点并展开 */childCheckExpand:function(checked){var me=this;me.expand(false,function(childs){ if(childs!=null){ for(var i=0;i<childs.length;i++){ var child=childs[i];child.set('checked', checked);child.childCheckExpand(checked);}}});},/* * 级选父节点 */parentCheck:function(checked){var me=this;var parentNode = me.parentNode;if (parentNode != null) {if((checked&&!parentNode.get('checked'))||(!checked&&!parentNode.hasCheckedChild())){ parentNode.set('checked', checked);parentNode.parentCheck(checked);}} },/* * 是否存在已选择子节点 */ hasCheckedChild:function(){ var node = this; var value=false; node.eachChild(function(child) { if (child.get('checked')) { value=true; return false; } }); return value; }
此代码跟上面的放在一起即可,加到节点方法上。
还有一种情况可能大家都有经历,就是级选被包含的节点,比如商品类别,每个商家拥有一套完整的商品类别,这个时候当我第二次修改商家的商品类别时,系统肯定要先把已经保存到该商家的节点勾选出来,这里有两个要求,一是勾选出已经存储的节点,二是树不能全部展开,可以想像,总的商品类别树是很庞大的,不可能把全部节点展开再级选包含的节点,所以改造如下:
/* * 级选并展开被包含节点 */containCheckChildExpand:function(cons,id){var me=this;me.expand(false,function(childs){ if(childs!=null){ for(var i=0;i<childs.length;i++){ var child=childs[i]; if (cons.contain(child.get(id))) {child.set('checked', true);child.containCheckChildExpand(cons,id);}else if(child.get('checked')){child.set('checked', false);child.childCheck(false);}}}});},/* * 级选被包含节点并展开全部 */containCheckChildAllExpand:function(cons,id){var me=this;me.expand(false,function(childs){ if(childs!=null){ for(var i=0;i<childs.length;i++){ var child=childs[i]; if (cons.contain(child.get(id))) {child.set('checked', true);}else if(child.get('checked')){child.set('checked', false);child.childCheck(false);}child.containCheckChildAllExpand(cons,id);}}});},/* * 级选被包含节点(同步树) */containCheckChild:function(cons,id){var me=this;me.cascadeBy(function(child) {if (cons.contain(child.get(id))) {child.set('checked', true);}else{child.set('checked', false);} });}, /* * 级选被包含子节点 */ selectContainChildren:function(res,id){ var cons = new Array();Ext.each(res, function(re) {cons.push(eval("re." + id));});this.containCheckChildExpand(cons,id); }, /* * 级选被包含子节点并展开全部 */ selectContainChilds:function(res,id){ var cons = new Array();Ext.each(res, function(re) {cons.push(eval("re." + id));});this.containCheckChildAllExpand(cons,id); }
参数说明一下,cons是包含的数据数组,id是树节点中用于判断是否包含的属性,res是包含的json数组,比如包含数据是:["12","25"],id是text,那么判断是方法 就是node.text是否包含在这个数组中,如果是json数组,就先转换为一般数组,再判断。
使用的效果是只展开并且勾选了被包含的节点,不包含的节点将不会展开,当然代码中提供了全部展开且勾选被包含节点的方法,
完整代码如下:
/** * 树节点方法 */Ext.applyIf(Ext.data.Model.prototype,{ /* * 重载 */reload:function(){var me=this; me.set('loaded', false);me.set('expanded',false);me.expand();},/* * 添加新节点时重载 */loadNewNode:function(){var me=this;me.set("leaf",false);me.reload();},/* * 级选(同步树) */cascadeCheck:function(checked){var me=this;me.childCheck(checked);me.parentCheck(checked);},/* * 级选并展开子节点 */cascadeCheckExpand:function(checked){var me=this;me.childCheckExpand(checked);me.parentCheck(checked);},/* * 级选子节点 */childCheck:function(checked){var me=this;me.cascadeBy(function(child) {child.set('checked', checked); });},/* * 级选父节点 */parentCheck:function(checked){var me=this;var parentNode = me.parentNode;if (parentNode != null) {if((checked&&!parentNode.get('checked'))||(!checked&&!parentNode.hasCheckedChild())){ parentNode.set('checked', checked);parentNode.parentCheck(checked);}} }, /* * 是否存在已选择子节点 */ hasCheckedChild:function(){ var node = this; var value=false;node.eachChild(function(child) {if (child.get('checked')) {value=true;return false;}});return value; },/* * 级选子节点并展开 */childCheckExpand:function(checked){var me=this;me.expand(false,function(childs){ if(childs!=null){ for(var i=0;i<childs.length;i++){ var child=childs[i];child.set('checked', checked);child.childCheckExpand(checked);}}});},/* * 级选并展开被包含节点 */containCheckChildExpand:function(cons,id){var me=this;me.expand(false,function(childs){ if(childs!=null){ for(var i=0;i<childs.length;i++){ var child=childs[i]; if (cons.contain(child.get(id))) {child.set('checked', true);child.containCheckChildExpand(cons,id);}else if(child.get('checked')){child.set('checked', false);child.childCheck(false);}}}});},/* * 级选被包含节点并展开全部 */containCheckChildAllExpand:function(cons,id){var me=this;me.expand(false,function(childs){ if(childs!=null){ for(var i=0;i<childs.length;i++){ var child=childs[i]; if (cons.contain(child.get(id))) {child.set('checked', true);}else if(child.get('checked')){child.set('checked', false);child.childCheck(false);}child.containCheckChildAllExpand(cons,id);}}});},/* * 级选被包含节点(同步树) */containCheckChild:function(cons,id){var me=this;me.cascadeBy(function(child) {if (cons.contain(child.get(id))) {child.set('checked', true);}else{child.set('checked', false);} });}, /* * 级选被包含子节点 */ selectContainChildren:function(res,id){ var cons = new Array();Ext.each(res, function(re) {cons.push(eval("re." + id));});this.containCheckChildExpand(cons,id); }, /* * 级选被包含子节点并展开全部 */ selectContainChilds:function(res,id){ var cons = new Array();Ext.each(res, function(re) {cons.push(eval("re." + id));});this.containCheckChildAllExpand(cons,id); }});
作者:kunoy
出处:http://blog.csdn.net/kunoy
申明:作者写博是为了总结经验,和交流学习之用。
如需转载,请尽量保留此申明,并在文章页面明显位置给出原文连接。谢谢!
如需转载,请尽量保留此申明,并在文章页面明显位置给出原文连接。谢谢!
1 0
- Extjs4增加Tree节点级选方法,可异步级选
- extjs4.1实现tree节点checkbox disable的方法探讨
- extjs4 tree 节点选中问题
- Extjs4中tree组件查找所有父节点和查找所有子节点的递归方法
- extjs4 treegrid动态增加树节点
- extjs4.0 动态异步加载节点数据
- extjs4.0 动态异步加载节点数据
- 动态增加tree组建节点
- zTree异步增加删除树节点
- 对于Extjs4中的tree无法显示根节点的问题
- Flex增加和删除Tree节点
- extjs可直接编辑节点的tree
- Extjs4----tree
- flex中tree判断节点等级并增加、删除节点
- Extjs4中tree组件子节点和父节点的级联操作
- EXTJS4 获取tree的节点id值和父节点的id值
- javascript中增加节点的方法
- EasyUI为Tree节点增加额外的属性
- Linked Data
- celery expires 让celery任务具有时效性
- 测试2
- tools:context=".MainActivity的作用
- ffmpeg--StreamingGuide
- Extjs4增加Tree节点级选方法,可异步级选
- 如何对dgrid表格中选择的行进行操作
- Android :子Activity 使用dialog 引发的BUG--android.view.WindowManager$BadTokenException: Unable to add wind
- 鸟哥的 iptables
- memcached的大坑,千万别踩
- java面向对象(十四) 多态性
- API Store助您“大跃进”
- 简单实现虚拟机联网
- C#获取文本文件的编码,自动区分GB2312和UTF8