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 ...
随机推荐
- SPOJ NSUBSTR Substrings ——后缀自动机
建后缀自动机 然后统计次数,只需要算出right集合的大小即可, 然后更新f[l[i]]和rit[i]取个max 然后根据rit集合短的一定包含长的的性质,从后往前更新一遍即可 #include &l ...
- BZOJ 1879 [Sdoi2009]Bill的挑战 ——状压DP
本来打算好好写写SDOI的DP题目,但是忒难了, 太难了,就写的这三道题仿佛是可做的. 生在弱省真是兴奋. 这题目直接状压,f[i][j]表示匹配到i,状态集合为j的方案数,然后递推即可. #incl ...
- 洛谷 [P1939] 矩阵加速数列
矩阵快速幂模版 #include <iostream> #include <cstring> #include <cstdlib> #include <alg ...
- android调用邮件应用发送email
直接贴代码: Intent intent = new Intent(android.content.Intent.ACTION_SEND); // 附件 File file = new File(En ...
- 死磕 java同步系列之自己动手写一个锁Lock
问题 (1)自己动手写一个锁需要哪些知识? (2)自己动手写一个锁到底有多简单? (3)自己能不能写出来一个完美的锁? 简介 本篇文章的目标一是自己动手写一个锁,这个锁的功能很简单,能进行正常的加锁. ...
- DFS与BFS对比
前面已经说过了深搜和广搜了,是不是有点还不是很好的分清他们?(其实分不分的请都没大有关系) 下面我们来看一看广搜与深搜的区别吧. 算法步骤上的区别 深度优先遍历图算法步骤: 1.访问顶点v 2,.依次 ...
- 某考试 T1 line
状压dp+矩阵转移,据说正解是dfs出的合法状态,,但难道不是三个for就行了吗2333 #include<iostream> #include<cmath> #include ...
- 第21章、OnItemSelectedListener事件(从零开始学Android)
在Android App应用中,OnItemSelectedListener事件也会经常用到,我们一起来了解一下. 基本知识点:OnItemSelectedListener事件 一.界面 1.新建pr ...
- 使用squid架设自己的代理server
主要參考了 http://blog.chinaunix.net/uid-20778906-id-540115.html Ubuntu下Squid代理server的安装与配置 1 安装 $ sudo a ...
- 批量修改文件权限 和所有者 chown nobody:nobody * -R chmod 775 * -R
chown nobody:nobody * -R chmod 775 * -R