extjs 之columntree 自定義分頁工具條

前提:columntree.js
/*
* Ext JS Library 2.0    
* Copyright(c) 2006-2007, Ext JS, LLC.    
* [email protected]    
*    
* 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(false, false, this.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(true, true);

}

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("提示", "連接數據庫錯誤或連接超時!");
}
});
}

 
 
 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章