extjs4.0 treepanel节点的选中、展开! 数据的重新加载

1.extjs4.0API较3.0有非常大变化
2.多级子父节点的选中和展开。
3.数据的重新加载。tree.getStore().load
4.节点的移除,从树中根据ID获取节点 tree.getStore().getNodeById();
5.获取选中的节点,tree.getView().getChecked();
6.数据为异步加载,设置节点选中,tree.getStore().getNodeById(‘‘).set({checked:true});

<script type="text/javascript">
Ext.require([
             ‘Ext.tree.*‘,
             ‘Ext.data.*‘,
             ‘Ext.window.MessageBox‘,
             ‘Ext.tip.*‘
         ]);
Ext.onReady(function() {
/*
 * 可以获取选中节点的ID,以及TEXT
 *
*/
var checkedNodes = {
    _data:{},
    update:function(id,text,checked){
        if(checked){
            this.add(id,text,checked);
        }else if(!checked){
            this.delById(id);
        }
    },
    add: function(id,text){
       if(!this._data[id]){
            this._data[id] = {‘id‘:id,‘text‘:text};
        }
    },
    delById:function(id){
        if(this._data[id]){
            delete this._data[id];
        }
    },
    getById:function(id){
        return this._data[id];
    },
    joinId:function(sep){
        arr = [];
        for(id in this._data){
            arr.push(id);
        }
        return arr.join(sep);
    },
    joinName:function(sep){
        arr = [];
        for(id in this._data){
            arr.push(this._data[id].text);
        }
        return arr.join(sep)
    },
    contains:function(id){
        return this_data[id];
    },
    init:function(ids,texts){
        if(ids.IndexOf(‘,‘) > 1){
            idarr = ids.split(‘,‘);
            textarr = texts.splist(‘,‘);
            for(var i=0; i<idarr.length; i++){
                if(idarr[i].replace(/^\s+|\s+$/g,‘‘) != ‘‘){
                    this.add(idarr[i],textarr[i]);
                }
            }
        }
    }
};
    Ext.define(‘OrgInfo‘, {extend: ‘Ext.data.Model‘,
        fields: [
            {name: ‘id‘},
            {name: ‘text‘},
            {name: ‘name‘}
        ]
    });
    var orgStore = Ext.create(‘Ext.data.TreeStore‘, {
        defaultRootId: "10",
        model: "OrgInfo",
        root: {id:10,text:‘顺丰速运集团‘,leaf:false},
        proxy: {type:‘ajax‘, actionMethods : "POST", url:‘tree_data.jsp‘, reader:{type:‘json‘}},
        nodeParam:‘id‘,
        textField : "name"
    });
    /*
    *设置子节点或者父节点选中的方法
    *设置单个节点选中的方法
    */
    var TreeNodeCheck ={
        setNodeChecked:function(node,checked){
            checkedNodes.update(node.get(‘id‘),node.get(‘text‘),checked);
            node.set(‘checked‘,checked);
        },
        childChecked:function(node,checked){
            TreeNodeCheck.setNodeChecked(node,checked);
            node.expand();
            if(node.hasChildNodes()){
                 node.eachChild(function(child) {
                     TreeNodeCheck.childChecked(child,checked);
                 });
            }
        },
        parentChecked:function(node,checked){
               var parentNode = node.parentNode;
               checked = parentNode == null ?null:checked;
               TreeNodeCheck.setNodeChecked(node,checked); //设置父节点不选 中
               if(parentNode !=null){ //如果父节点不为空则展开
                   var flag = false;
                   parentNode.eachChild(function(child) {
                       if(child.data.checked == true){
                           flag = true;
                       }
                  });
                  if(checked == false){
                       if(!flag){
                               TreeNodeCheck.parentChecked(parentNode,checked);
                           }
                  }else{
                        if(flag){
                            TreeNodeCheck.parentChecked(parentNode,checked);
                          }
                  }
                }

        }
    };
       Ext.define("OrgTreePanel", {
            extend: "Ext.tree.Panel",
            store : orgStore,
            rootVisible: true,
            useArrows: true,
            frame: true,
            title: ‘Check Tree‘,
            width: 200,
            height: 250,
            padding:‘0 0 0 0‘,
            selectIds:function(){
                 var records =this.getView().getChecked(),
                 ids = [];
                 Ext.Array.each(records, function(rec){
                     ids.push(rec.get(‘id‘));
                 });
                 return ids.join(",");
            },
            listeners:{
                   checkchange:function (node,checked,eOpts){
                       TreeNodeCheck.childChecked(node,checked);
                       TreeNodeCheck.parentChecked(node,checked);

                   },
                load:function( store,  records,  successful,  operation,  eOpts ){
                      if(records.data.checked!=null){
                          var hasChecked = false;
                          Ext.Array.each(successful, function(rec){
                              if(rec.data.checked){
                                  hasChecked = true;
                                  return false;
                              }
                           });
                          if(!records.data.checked){
                              if(hasChecked){
                                    Ext.Array.each(successful, function(rec){
                                             TreeNodeCheck.childChecked(rec,false);
                                     });
                              }
                          }else{
                              if(!hasChecked){
                                  Ext.Array.each(successful, function(rec){
                                           TreeNodeCheck.childChecked(rec,true);
                                     });
                              }
                          }
                      }
                }
            }
        });

       var win = null;
       var tree = null;

       Ext.create(‘Ext.Button‘, {
            text: ‘得到被选中的节点‘,
            renderTo: Ext.getBody(),
            handler: function() {

                console.info(Ext.isEmpty(‘ ‘));
                    console.info("checkedNodes.joinId:"+checkedNodes.joinId("-"));

            }
       });

       Ext.create(‘Ext.Button‘, {
            text: ‘delete tree‘,
            renderTo: Ext.getBody(),
            handler: function() {
                 tree.getRootNode().removeAll(false);
                 tree.getStore().load();
            }
       });

       win = Ext.create(‘Ext.window.Window‘, {
               title: ‘Hello‘,
               height: 250,
               width: 400,
               layout: ‘fit‘,
                closeAction :‘hide‘,
                showWin:function(){
                    this.show();
                    tree.getRootNode().removeAll(false);
                   tree.getStore().load({
                    scope :this,
                    callback: function(records, operation, success) {
                       if(!tree.getRootNode().isExpanded()){
                           tree.getRootNode().expand();
                       }
                    }
                });
                },
               initComponent: function () {//构造函数
                var me = this;
                tree = Ext.create("OrgTreePanel");
                me.items = [tree];
                me.superclass.initComponent.call(me);
            },
            listeners: {
                beforehide:function(win, eOpts ){

                }
            }
       });

       Ext.create(‘Ext.Button‘, {
            text: ‘Click me‘,
            renderTo: Ext.getBody(),
            handler: function() {
                 win.showWin();
            }
      });
});
</script>
时间: 2024-10-24 12:05:20

extjs4.0 treepanel节点的选中、展开! 数据的重新加载的相关文章

区块链教程Fabric1.0源代码分析Peer peer根命令入口及加载子命令二

区块链教程Fabric1.0源代码分析Peer peer根命令入口及加载子命令二.flogging,即:fabric logging,为Fabric基于第三方包go-logging封装的日志包,go-logging使用方法参考:github.com/op/go-logging如下代码为flogging包的初始化函数: func init() { ????logger = logging.MustGetLogger(pkgLogID) //创建仅在flogging包内代码使用的logging.Lo

Plist数据表格的加载详细事例

1.本次主要加载单一字典的plist数据(app.plist),形式如下 2.加载plist数据,先将数据字典转换成对应的模型,本例子所用的是各个应用的图标,对应的就应该创建一个应用图标的模型huapp(名称自拟).在头文件中定义所有变量,以及将字典转换成模型数据的两个方法,如下图: 类方法调用对象方法,在对象方法中转换模型 注意:在对象方法中属性的转化还可已使用KVC,一句代码就解决 [self setValuesForKeysWithDictionary:dict]; 但是使用KVC,就会将

【EF学习笔记08】----------加载关联表的数据 显式加载

显式加载 讲解之前,先来看一下我们的数据库结构:班级表 学生表 加载从表集合类型 //显示加载 Console.WriteLine("=========查询集合==========="); using (var db = new Entities()) { var query = from v in db.Classes where v.ClassName == "机电10501" select v; var cls = query.Single(); db.Ent

element中树形数据与懒加载实现全部展开和全部收起

element中属性懒加载数据 default-expand-all属性::是否默认展开所有行,当 Table 包含展开行存在或者为树形表格时有效 如果在表格头上加上一个按钮实现全部展开与收起 类似如图这种  默认是[全部展开]按钮,点击后,树状列表下所有数据为展示,按钮变为[全部收起]:点击[全部收起]时,树状列表下所有数据为收起状态,即返回默认状 如果动态设置控制default-expand-all树状图是不发生变化的 也就是不起作用. 解决方法:上代码: <template> <d

MiniUI treeGrid 动态加载数据与静态加载数据的区别

说明:treegrid静态数据加载时数据结构是一棵树包含children节点集合,而采用动态加载数据时数据是List结构的具体项. 静态加载数据 test1.html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="ht

【Win10 应用开发】实现数据的增量加载

今天,老周有小故事讲,国庆期间.有一次老周在某站台上候公交车.老周旁边也站满了人,突然,有一位头发弄得像电线杆的小伙子,不知为何,没有先兆地就大笑起来. 老周先是看了那小伙子一眼,他手上没有拿什么东西(一瓶水),也没在看书或手机,就这样忽然大笑不止.随即,老周便后退了两步,观察一下其他人有什么反应. 一位年轻妈妈拉着小女儿走开了,接着,一位大叔走到垃圾桶旁边拨弄烟灰:然后,一位女孩后退了一两步:站在发笑者旁边的一位先生蹲下身来,不知道在做什么…… 如果是你,你会有什么反应? ==========

【汇编指令】arm指令集之但寄存器数据load/store (加载存储)

数据的传送: LDR              STR                   .WORD LDRB            STRB              .BYTE LDRH             STRH            .HALFWORD LDR 和STR 加载/存储字和无符号字节指令.使用单一数据传送指令(STR 和LDR)来装载和存储单一字节或字的数据从/到内存.LDR指令用于从内存中读取数据放入寄存器中:STR 指令用于将寄存器中的数据保存到内存.指令格式如下

Android: ListView数据的分批加载 以及 Handle 总结

这是效果图: activity_main.xml 01 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 02     xmlns:tools="http://schemas.android.com/tools" 03     android:layout_width="match_parent" 04     android:layout_he

如何在在WinFrom的DataGridView中做到数据持续动态加载而不卡死

1.在这个过程我用过好几种办法 (1)使用委托的办法,这个方法可以做到持续加载,但是效果不理想会卡死 (2)开启线程的方法,会造成卡死 (3)使用另一个窗体的线程做持续加载(子窗体),让子窗体作为一个中间件去通知dataGridView绑定数据,子窗体隐藏.从而可以使主窗体不用卡死 ,给用户造成一中假状态,卡死的是子窗体而已,并且做了隐藏. 2.截图如下 (3)代码如下 <1>借助了两个类:ComAsyncExecute.cs  TSwitch.cs <2>具体代码内容如下: Co