extjs 之columntree 自定义分页工具条

简介:
前提:columntree.js
/*
* Ext JS Library 2.0    
* Copyright(c) 2006-2007, Ext JS, LLC.    
* licensing@extjs.com    
*     
* http: //extjs.com/license    
*/ 
Ext.tree.ColumnTree = Ext.extend(Ext.tree.TreePanel, { 
// lines:false, 
borderWidth : Ext.isBorderBox ? 0 : 2,  // the combined left/right border 
// for each cell 
cls : 'x-column-tree', 
scrollOffset : 18, 


onRender :  function() { 
Ext.tree.ColumnTree.superclass.onRender.apply( this, arguments); 
this.headers =  this.body.createChild({ 
cls : 'x-tree-headers ' 
},  this.body.dom); 
var cols =  this.columns, c; 
var totalWidth = 0; 
for (  var i = 0, len = cols.length; i < len; i++) { 
c = cols[i]; 
totalWidth += c.width; 
this.headers.createChild({ 
cls : 'x-tree-hd ' + (c.cls ? c.cls + '-hd' : ''), 
cn : { 
cls : 'x-tree-hd-text', 
html : c.header 
}, 
style : 'width:' + (c.width -  this.borderWidth) + 'px;' 
}); 



this.headers.createChild({ 
cls : 'x-tree-hd ', 
cn : { 
html : '' 
}, 
style : 'width:' +  this.scrollOffset + 'px;' 
}); 
totalWidth +=  this.scrollOffset; 


this.headers.createChild({ 
cls : 'x-clear' 
}); 
// prevent floats from wrapping when clipped 
this.headers.setWidth(totalWidth); 
totalWidth -=  this.scrollOffset; 
this.innerCt.setWidth(totalWidth); 

}); 
Ext.tree.ColumnTreeNodeUI = Ext 
.extend( 
Ext.tree.TreeNodeUI, 

focus : Ext.emptyFn,  // prevent odd scrolling behavior 
renderElements :  function(n, a, targetNode, bulkRender) { 
this.indentMarkup = n.parentNode ? n.parentNode.ui 
.getChildIndent() : ''; 
var t = n.getOwnerTree(); 
var cols = t.columns; 
var bw = t.borderWidth; 
var c = cols[0]; 
var cb =  typeof a.checked == ' boolean'; 
if ( typeof  this.checkModel != 'undefined') { 
cb = (! this.onlyLeafCheckable || n.isLeaf()); 

var href = a.href ? a.href : Ext.isGecko ?  "" : "#"; 
var buf = [ 
'<li  class= "x-tree-node"><div ext:tree-node-id="', 
n.id, 
' " class="x-tree-node-el x-tree-node-leaf x-unselectable ', 
a.cls, 
' " unselectable="on">', 
'<div  class= "x-tree-col" style="width:', 
c.width - bw, 
'px;">', 
'<span  class= "x-tree-node-indent">', 
this.indentMarkup, 
"</span>"
'<img src="', 
this.emptyIcon, 
' " class="x-tree-ec-icon x-tree-elbow">', 
'<img src="', 
a.icon ||  this.emptyIcon, 
' " class="x-tree-node-icon', 
(a.icon ?  " x-tree-node-inline-icon" : ""), 
(a.iconCls ?  " " + a.iconCls : ""), 
' " unselectable="on">', 
cb ? ('<input  class= "x-tree-node-cb" type= "checkbox" ' + (a.checked ? 'checked= "checked" />' 
: '/>')) 
: '', 
'<a hidefocus= "on"  class= "x-tree-node-anchor" href="', 
href, 
' " tabIndex="1" ', 
a.hrefTarget ? ' target= "' + a.hrefTarget + '"
: "", 
'>', 
'<span unselectable= "on">', 
n.text 
|| (a[c.dataIndex] ? (c.renderer ? c 
.renderer(a[c.dataIndex], n, a) 
: a[c.dataIndex]) : ''), 
" </span></a>""</div>" ]; 
for (  var i = 1, len = cols.length; i < len; i++) { 
c = cols[i]; 
buf.push('<div  class="x-tree-col ', (c.cls ? c.cls 
: ''), ' " style="width:', c.width - bw, 
'px; ">', '<div class="x-tree-col-text">', 
(a[c.dataIndex] ? (c.renderer ? c.renderer( 
a[c.dataIndex], n, a) 
: a[c.dataIndex]) : ''), 
" </div>""</div>"); 

buf 
.push( 
'<div  class= "x-clear"></div>', 
'</div>', 
'<ul  class= "x-tree-node-ct" style= "display:none;"></ul>', 
"</li>"); 


if (bulkRender !==  true && n.nextSibling 
&& n.nextSibling.ui.getEl()) { 
this.wrap = Ext.DomHelper.insertHtml( "beforeBegin"
n.nextSibling.ui.getEl(), buf.join("")); 
else { 
this.wrap = Ext.DomHelper.insertHtml( "beforeEnd"
targetNode, buf.join("")); 

this.elNode =  this.wrap.childNodes[0]; 
this.ctNode =  this.wrap.childNodes[1]; 
var cs =  this.elNode.firstChild.childNodes; 
this.indentNode = cs[0]; 
this.ecNode = cs[1]; 
this.iconNode = cs[2]; 


var index = 3; 
if (cb) { 
this.checkbox = cs[3]; 
index++; 

this.anchor = cs[index]; 
this.textNode = cs[index].firstChild; 

}); 
// 这个组件是扩展的,加入这个组件即可 
Ext.ux.ColumnTreeCheckNodeUI =  function() { 
// 多选: 'multiple'(默认) 
// 单选: 'single' 
// 级联多选: 'cascade'(同时选父和子);'parentCascade'(选父);'childCascade'(选子) 
this.checkModel = 'multiple'; 


// only leaf can checked 
this.onlyLeafCheckable =  false


Ext.ux.ColumnTreeCheckNodeUI.superclass.constructor.apply( this, arguments); 
}; 
Ext.extend(Ext.ux.ColumnTreeCheckNodeUI, Ext.tree.ColumnTreeNodeUI, { 


renderElements :  function(n, a, targetNode, bulkRender) { 
var t = n.getOwnerTree(); 
this.checkModel = t.checkModel ||  this.checkModel; 
this.onlyLeafCheckable = t.onlyLeafCheckable ||  false


Ext.ux.ColumnTreeCheckNodeUI.superclass.renderElements.apply( this
arguments); 


var cb = (! this.onlyLeafCheckable || n.isLeaf()); 
if (cb) { 
Ext.fly( this.checkbox).on('click', 
this.check.createDelegate( this, [  null ])); 

}, 


// private 
check :  function(checked) { 
var n =  this.node; 
var tree = n.getOwnerTree(); 
this.checkModel = tree.checkModel ||  this.checkModel; 


if (checked ===  null) { 
checked =  this.checkbox.checked; 
else { 
this.checkbox.checked = checked; 



n.attributes.checked = checked; 
tree.fireEvent('check', n, checked); 


if (! this.onlyLeafCheckable) { 
if ( this.checkModel == 'cascade' 
||  this.checkModel == 'parentCascade') { 
var parentNode = n.parentNode; 
if (parentNode !==  null) { 
this.parentCheck(parentNode, checked); 


if ( this.checkModel == 'cascade' 
||  this.checkModel == 'childCascade') { 
if (!n.expanded && !n.childrenRendered) { 
n.expand( falsefalsethis.childCheck); 
else { 
this.childCheck(n); 


else  if ( this.checkModel == 'single') { 
var checkedNodes = tree.getChecked(); 
for (  var i = 0; i < checkedNodes.length; i++) { 
var node = checkedNodes[i]; 
if (node.id != n.id) { 
node.getUI().checkbox.checked =  false
node.attributes.checked =  false
tree.fireEvent('check', node,  false); 



}, 


// private 
childCheck :  function(node) { 
var a = node.attributes; 
if (!a.leaf) { 
var cs = node.childNodes; 
var csui; 
for (  var i = 0; i < cs.length; i++) { 
csui = cs[i].getUI(); 
if (csui.checkbox.checked ^ a.checked) 
csui.check(a.checked); 


}, 


// private 
parentCheck :  function(node, checked) { 
var checkbox = node.getUI().checkbox; 
if ( typeof checkbox == 'undefined') 
return
if (!(checked ^ checkbox.checked)) 
return
if (!checked &&  this.childHasChecked(node)) 
return
checkbox.checked = checked; 
node.attributes.checked = checked; 
node.getOwnerTree().fireEvent('check', node, checked); 


var parentNode = node.parentNode; 
if (parentNode !==  null) { 
this.parentCheck(parentNode, checked); 

}, 


// private 
childHasChecked :  function(node) { 
var childNodes = node.childNodes; 
if (childNodes || childNodes.length > 0) { 
for (  var i = 0; i < childNodes.length; i++) { 
if (childNodes[i].getUI().checkbox.checked) 
return  true


return  false
}, 


toggleCheck :  function(value) { 
var cb =  this.checkbox; 
if (cb) { 
var checked = (value === undefined ? !cb.checked : value); 
this.check(checked); 


});
 
2.自定义分页工具条
var bt_first =  new Ext.Toolbar.Button({ 
tooltip :  "第一页"
overflowText :  "第一页"
iconCls : 'x-tbar-page-first', 
disabled :  false
enable :  true
handler : do_first 
}); 


var bt_prev =  new Ext.Toolbar.Button({ 
tooltip :  "前一页"
overflowText :  "前一页"
iconCls : 'x-tbar-page-prev', 
disabled :  false
enable :  true
handler : do_prev 
}); 
var bt_number =  new Ext.form.NumberField({ 
cls : 'x-tbar-page-number', 
allowDecimals :  false
allowNegative :  false
enableKeyEvents :  true
selectOnFocus :  true
submitValue :  false
listeners : { 
keydown : onPagingKeyDown 

}); 
bt_number.setValue(curPageNum); 


var bt_next =  new Ext.Toolbar.Button({ 
tooltip :  "下一页"
overflowText :  "下一页"
iconCls : 'x-tbar-page-next', 
disabled :  false
enable :  true
handler : do_next 
}); 


var bt_last =  new Ext.Toolbar.Button({ 
tooltip :  "最后页"
overflowText :  "最后页"
iconCls : 'x-tbar-page-last', 
disabled :  false
enable :  true
handler : do_last 
}); 


var bt_refresh =  new Ext.Toolbar.Button({ 
tooltip :  "刷新"
overflowText :  "刷新"
iconCls : 'x-tbar-loading', 
disabled :  false
enable :  true
handler : do_refresh 
}); 


var lb_num =  new Ext.form.Label({ 
text : '0' 
}); 


function do_first() { 
start = 0; 
log_search(); 
curPageNum = 1; 
bt_number.setValue(curPageNum); 



function do_next() { 
start = start + limit; 
log_search(); 
curPageNum = curPageNum + 1; 
bt_number.setValue(curPageNum); 



function do_last() { 
start = (maxPageCount - 1) * pagesize; 
log_search(); 
curPageNum = maxPageCount; 
bt_number.setValue(curPageNum); 



function do_prev() { 
start = start - pagesize; 
log_search(); 
curPageNum = curPageNum - 1; 
bt_number.setValue(curPageNum); 


function onPagingKeyDown(txtfield, e) { 
if (e.getKey() == Ext.EventObject.ENTER) { 
if (bt_number.getValue() != "") { 
start = (parseInt(bt_number.getValue()) - 1) * pagesize; 
log_search(); 
else 
alert(bt_number.getValue()); 




function do_refresh() { 
log_search(); 

var m_toolbar =  new Ext.Toolbar({ 
items : [ bt_first, bt_prev, '-', '第', bt_number, '页', '共', lb_num, 
'页', '-', bt_next, bt_last, bt_refresh ] 
});
 
在Tree中加载自定义工具条
test_log_tree =  new Ext.tree.ColumnTree({ 
region : 'south', 
border :  true
rootVisible :  false
split :  true
columnLines :  true
autoScroll :  true
tbar : [ log_p_buttons ],                                 //代码在这里,加载自定义工具条 
height : Glb.outer_center.getHeight() * 0.70, 
loader : log_treeloader, 
columns : [ { 
header : '名称', 
width : 150, 
dataIndex : 'text' 
}, { 
header : '描述', 
width : 250, 
dataIndex : 'description' 
}, { 
header : '状态', 
width : 100, 
dataIndex : 'status_str' 
}, { 
header : '执行时间', 
width : 150, 
dataIndex : 'create_time' 
}, { 
header : '步骤日志', 
width : 600, 
dataIndex : 'loginfo' 



], 
root :  new Ext.tree.AsyncTreeNode({ 
text : '测试日志' 
}), 
bbar : m_toolbar, 
listeners : { 
beforeload :  function(n) { 
/* 
test_log_tree.getLoader().dataUrl = 'GetTestLog'; 
test_log_tree.getLoader().uiProviders = { 
'col' : Ext.tree.ColumnTreeNodeUI 
}; 
*/
 


});
 
加载数据
function log_search() { 
getMaxSize(); 
beloaded =  false
if (taskid <= 0) 
taskid = -2; 
test_log_tree.root.attributes.children =  false
//Read4();        //加载滚动条代码,不是本文重点,可以不关注 
test_log_tree.root.reload(); 
test_log_tree.root.collapse( truetrue); 



log_treeloader.on('beforeload',  function() { 
if (start <= 0) 
start = 0; 
if (limit <= 0) 
limit = limit; 
var runner = log_lb_runner.getValue(); 
var projectid = log_combo_project.getValue(); 
var casename = log_lb_case.getValue(); 
var module = log_lb_module.getValue(); 
var planname = log_lb_plan.getValue(); 


var bdate = begin_date.getValue(); 
var edate = end_date.getValue(); 
var sbdate = ""; 
if (bdate != "") 
sbdate = bdate.format('Y-m-d'); 
else 
sbdate = ""; 


if (edate != "") 
edate = edate.format('Y-m-d'); 
if (planname == "") 
planid = -1; 
Ext.apply( this.baseParams, { 
start : start, 
limit : limit, 
taskid : taskid, 
runner : runner, 
projectid : projectid, 
casename : casename, 
module : module, 
planname : planname, 
begindate : sbdate, 
enddate : edate, 
planid : planid 
}); 
});
 
取得所有记录条数
function getMaxSize() { 
if (start <= 0) 
start = 0; 
if (limit <= 0) 
limit = limit; 
var runner = log_lb_runner.getValue(); 
var projectid = log_combo_project.getValue(); 
var casename = log_lb_case.getValue(); 
var module = log_lb_module.getValue(); 
var planname = log_lb_plan.getValue(); 
var bdate = begin_date.getValue(); 
var edate = end_date.getValue(); 
var sbdate = ""; 
if (bdate != "") 
sbdate = bdate.format('Y-m-d'); 
else 
sbdate = ""; 


if (edate != "") 
edate = edate.format('Y-m-d'); 
if (planname == "") 
planid = -1; 
Ext.Ajax.request({ 
url : 'GetTestLogCount', 
params : { 
start : 0, 
limit : limit, 
taskid : taskid, 
runner : runner, 
projectid : projectid, 
casename : casename, 
module : module, 
planname : planname, 
begindate : sbdate, 
enddate : edate, 
planid : planid 
}, 
success :  function(response) { 
treedata = response.responseText; 
realCount = Ext.decode(treedata).totalCount; 
// alert(realCount); 
maxPageCount = Math.ceil(realCount / pagesize); 
lb_num.setText(maxPageCount); 
}, 
failure :  function() { 
Ext.Msg.alert( "提示""连接数据库错误或连接超时!"); 

}); 


 本文转自elbertchen 51CTO博客,原文链接:http://blog.51cto.com/linkyou/751921,如需转载请自行联系原作者
 
相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
1月前
|
JavaScript 前端开发
vue element-ui分页插件 始终保持在页面底部样式
vue element-ui分页插件 始终保持在页面底部样式
18 0
|
4月前
|
前端开发
Element常用组件—表格、表单、对话框和分页工具条
Element常用组件—表格、表单、对话框和分页工具条
39 0
|
10月前
|
数据可视化 JavaScript 前端开发
ElementUI实现表格内嵌进度条功能
ElementUI实现表格内嵌进度条功能
388 1
|
JavaScript 测试技术
Easyui datagrid 修改分页组件的分页提示信息为中文
Easyui datagrid 修改分页组件的分页提示信息为中文
63 0
|
JavaScript 前端开发 程序员
【前端】使用jQuery封装一套UI组件 - 可编辑下拉框组件
下拉框也是比较常用的组件,对应原生的下拉标签就是select 本篇文章就来讲讲可编辑下拉框组件的封装过程
331 0
|
前端开发 JavaScript
【前端】vue3+elment plus实现table表格右侧滑动分页加载
vue3+elment plus实现table表格右侧滑动分页加载
429 0
【前端】vue3+elment plus实现table表格右侧滑动分页加载
|
算法
分页控件和几个相关控件的源代码
分页控件的源代码,可能会让有些人失望,因为代码很乱。乱的一个原因呢,可能是没有采用OO的思路吧,因为写控件的时候还一点都不会OO呢,只是一直在用,也就没有作大的重构。有两个分页控件, 一个是通过PostBack来分页的,一个是通过URL来分页的。
765 0
|
数据库
分页控件的使用能不能再简单一点呢,能不能一个页面搞定所有的列表需求?
目的: 1、一个页面(DataList.aspx)可以显示多个模块的列表功能。      一般是有一个列表需求就需要一个aspx文件,如果有100个列表,那么就会有100个aspx文件,这么多的文件(包括.aspx.cs文件)里面的内容基本是一样的,这样写起来麻烦,管理起来也不容易,命名就是一个比较头痛的问题。
1041 0
|
JavaScript
jQuery自定义美化下拉框
在线演示 本地下载
845 0
|
JavaScript 前端开发 安全
扩展EasyUI在页面中马上显示选中的本地图片
在编写前台页面的时候,有时须要将选中的图片夹杂着其它信息一起上传到服务端,在选着本地图片的时候,为了获得更好的效果,须要将该图片显示在页面上。
2431 0