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>
extjs4.0 treepanel节点的选中、展开! 数据的重新加载的更多相关文章
- 参考 ZTree 加载大数据量。加载慢问题解析
参考 ZTree 加载大数据量. 1.一次性加载大数据量加载说明 1).zTree v3.x 针对大数据量一次性加载进行了更深入的优化,实现了延迟加载功能,即不展开的节点不创建子节点的 DOM. 2) ...
- vue 中监测滚动条加载数据(懒加载数据)
vue 中监测滚动条加载数据(懒加载数据) 1:钩子函数监听滚动事件: mounted () { this.$nextTick(function () { window.addEventListene ...
- 不想分页怎么办??-->页面数据的滚动加载
在前几天的一次前台数据展示的时候 为了更好的用户的体验 就想着做一个数据的滚动加载功能 于是简单的查询了网上的实现方式 基本都是在页面加载的时候绑定scroll事件 然后判断页面触底的时候 进行aja ...
- Flutter 开发从 0 到 1(四)ListView 下拉加载和加载更多
在<APP 开发从 0 到 1(三)布局与 ListView>我们完成了 ListView,这篇文章将做 ListView 下拉加载和加载更多. ListView 下拉加载 Flutter ...
- 【EF学习笔记08】----------加载关联表的数据 显式加载
显式加载 讲解之前,先来看一下我们的数据库结构:班级表 学生表 加载从表集合类型 //显示加载 Console.WriteLine("=========查询集合===========&quo ...
- OGG初始化之将数据从文件加载到Replicat
要使用Replicat建立目标数据,可以使用初始加载Extract从源表中提取源记录,并将它们以规范格式写入提取文件.从该文件中,初始加载Replicat使用数据库接口加载数据.在加载过程中,更改同步 ...
- hibernate框架学习之数据抓取(加载)策略
Hibernate获取数据方式 lHibernate提供了多种方式获取数据 •load方法获取数据 •get方法获取数据 •Query/ Criteria对象获取数据 lHibernate获取的数据分 ...
- 利用WPF的ListView进行大数据量异步加载
原文:利用WPF的ListView进行大数据量异步加载 由于之前利用Winform的ListView进行大数据量加载的时候,诟病良多,所以今天试着用WPF的ListView来做了一下,结果没有让我失望 ...
- DataTable 删除数据后重新加载
DataTable 删除数据后重新加载 一.总结 一句话总结: 判断datatable是否被datatable初始化或者是否执行了datatable销毁函数,如果没有,就销毁它 if ($('#dat ...
随机推荐
- Codeforces Round Rockethon 2015
A. Game 题目大意:A有N1个球,B有N2个球,A每次可以扔1-K1个球,B每次可以扔1-K2个球,谁先不能操作谁熟 思路:.....显然每次扔一个球最优.... #include<ios ...
- bat常用命令,转【http://www.cnblogs.com/yplong/archive/2013/04/02/2996550.html】
1.@它的作用是隐藏它后面这一行的命令本身(只能影响当前行).2.echo中文为“反馈”.“回显”的意思.它其实是一个开关命令,就是说它只有两种状态:打开和关闭.于是就有了echo on和echo o ...
- Linux下AT&T汇编语法格式与Intel汇编语法格式异同
由于绝大多数的国内程序员以前只接触过Intel格式的汇编语言,很少或几乎没有接触过AT&T汇编语言,虽然这些汇编代码都是Intel风格的.但在Unix和Linux系统中,更多采用的还是AT&a ...
- keepalived学习
HA集群 keepalived heartbeat corosync cman 功能实现 vrrp协议在Linux主机上以守护进程方式, 能够根据配置文件自动生成ipvs规则 对各RS健康状态检测 组 ...
- T2597 团伙 codevs
http://codevs.cn/problem/2597/ 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 1920年的芝加 ...
- P3378 堆【模板】 洛谷
https://www.luogu.org/problem/show?pid=3378 题目描述 如题,初始小根堆为空,我们需要支持以下3种操作: 操作1: 1 x 表示将x插入到堆中 操作2: 2 ...
- TOJ 4105
题意:有10万个点,10万个询问,没有更新,求L1<=L<=L2,R1<=R<=R2,有多少个, 其实转换一下:就是求一个矩形 (L1,R1) ----(L2,R2) 中有多少 ...
- Mac--安装kubernetes并运行echoserver
安装minikube curl -Lo minikube https://storage.googleapis.com/minikube/releases/v0.15.0/minikube-darwi ...
- android中MVC,MVP和MVVM三种模式详解析
我们都知道,Android本身就采用了MVC模式,model层数据源层我们就不说了,至于view层即通过xml来体现,而 controller层的角色一般是由activity来担当的.虽然我们项目用到 ...
- sshd登录攻击
先说简单的防范措施: 1.密码足够复杂 密码的长度大于8位.有数字.大小写字母.特殊字符组合. 2.nmap 扫描 为了避免被扫描到, #看到端口是81 ssh root@192.168.1.63 玩 ...