📄 gridview2.js
字号:
source = this.lockedBody.dom.firstChild;
}else{
source = this.mainBody.dom.firstChild;
colIndex -= locked;
}
return source.rows[rowIndex].childNodes[colIndex];
},
getCellText : function(rowIndex, colIndex){
return this.getCell(rowIndex, colIndex).firstChild.firstChild;
},
getCellBox : function(cell){
var b = this.fly(cell).getBox();
if(Ext.isOpera){ // opera fails to report the Y
b.y = cell.offsetTop + this.mainBody.getY();
}
return b;
},
getCellIndex : function(cell){
var id = String(cell.className).match(this.cellRE);
if(id){
return parseInt(id[1], 10);
}
return 0;
},
findHeaderIndex : function(n){
var r = Ext.fly(n).findParent("td." + this.hdClass, 6);
return r ? this.getCellIndex(r) : false;
},
findHeaderCell : function(n){
var r = Ext.fly(n).findParent("td." + this.hdClass, 6);
return r ? r : false;
},
findRowIndex : function(n){
if(!n){
return false;
}
var r = Ext.fly(n).findParent("tr." + this.rowClass, 6);
return r ? r.rowIndex : false;
},
findCellIndex : function(node){
var stop = this.el.dom;
while(node && node != stop){
if(this.findRE.test(node.className)){
return this.getCellIndex(node);
}
node = node.parentNode;
}
return false;
},
getColumnId : function(index){
return this.cm.getColumnId(index);
},
getSplitters : function(){
if(this.splitterSelector){
return Ext.DomQuery.select(this.splitterSelector);
}else{
return null;
}
},
getSplitter : function(index){
return this.getSplitters()[index];
},
onRowOver : function(e, t){
var row;
if((row = this.findRowIndex(t)) !== false){
this.getRowComposite(row).addClass("x-grid-row-over");
}
},
onRowOut : function(e, t){
var row;
if((row = this.findRowIndex(t)) !== false && row !== this.findRowIndex(e.getRelatedTarget())){
this.getRowComposite(row).removeClass("x-grid-row-over");
}
},
renderHeaders : function(){
var cm = this.cm;
var ct = this.templates.hcell, ht = this.templates.header, st = this.templates.hsplit;
var cb = [], lb = [], sb = [], lsb = [], p = {};
for(var i = 0, len = cm.getColumnCount(); i < len; i++){
p.cellId = "x-grid-hd-0-" + i;
p.splitId = "x-grid-csplit-0-" + i;
p.id = cm.getColumnId(i);
p.title = cm.getColumnTooltip(i) || "";
p.value = cm.getColumnHeader(i) || "";
p.style = (this.grid.enableColumnResize === false || !cm.isResizable(i) || cm.isFixed(i)) ? 'cursor:default' : '';
if(!cm.isLocked(i)){
cb[cb.length] = ct.apply(p);
sb[sb.length] = st.apply(p);
}else{
lb[lb.length] = ct.apply(p);
lsb[lsb.length] = st.apply(p);
}
}
return [ht.apply({cells: lb.join(""), splits:lsb.join("")}),
ht.apply({cells: cb.join(""), splits:sb.join("")})];
},
updateHeaders : function(){
var html = this.renderHeaders();
this.lockedHd.update(html[0]);
this.mainHd.update(html[1]);
},
/**
* Focuses the specified row.
* @param {Number} row The row index
*/
focusRow : function(row){
var x = this.scroller.dom.scrollLeft;
this.focusCell(row, 0, false);
this.scroller.dom.scrollLeft = x;
},
/**
* Focuses the specified cell.
* @param {Number} row The row index
* @param {Number} col The column index
* @param {Boolean} hscroll false to disable horizontal scrolling
*/
focusCell : function(row, col, hscroll){
var el = this.ensureVisible(row, col, hscroll);
this.focusEl.alignTo(el, "tl-tl");
if(Ext.isGecko){
this.focusEl.focus();
}else{
this.focusEl.focus.defer(1, this.focusEl);
}
},
/**
* Scrolls the specified cell into view
* @param {Number} row The row index
* @param {Number} col The column index
* @param {Boolean} hscroll false to disable horizontal scrolling
*/
ensureVisible : function(row, col, hscroll){
if(typeof row != "number"){
row = row.rowIndex;
}
if(row < 0 && row >= this.ds.getCount()){
return;
}
col = (col !== undefined ? col : 0);
var cm = this.grid.colModel;
while(cm.isHidden(col)){
col++;
}
var el = this.getCell(row, col);
if(!el){
return;
}
var c = this.scroller.dom;
var ctop = parseInt(el.offsetTop, 10);
var cleft = parseInt(el.offsetLeft, 10);
var cbot = ctop + el.offsetHeight;
var cright = cleft + el.offsetWidth;
var ch = c.clientHeight - this.mainHd.dom.offsetHeight;
var stop = parseInt(c.scrollTop, 10);
var sleft = parseInt(c.scrollLeft, 10);
var sbot = stop + ch;
var sright = sleft + c.clientWidth;
if(ctop < stop){
c.scrollTop = ctop;
}else if(cbot > sbot){
c.scrollTop = cbot-ch;
}
if(hscroll !== false){
if(cleft < sleft){
c.scrollLeft = cleft;
}else if(cright > sright){
c.scrollLeft = cright-c.clientWidth;
}
}
return el;
},
updateColumns : function(){
this.grid.stopEditing();
var cm = this.grid.colModel, colIds = this.getColumnIds();
//var totalWidth = cm.getTotalWidth();
var pos = 0;
for(var i = 0, len = cm.getColumnCount(); i < len; i++){
//if(cm.isHidden(i)) continue;
var w = cm.getColumnWidth(i);
this.css.updateRule(this.colSelector+colIds[i], "width", (w - this.borderWidth) + "px");
this.css.updateRule(this.hdSelector+colIds[i], "width", (w - this.borderWidth) + "px");
}
this.updateSplitters();
},
generateRules : function(cm){
var ruleBuf = [];
for(var i = 0, len = cm.getColumnCount(); i < len; i++){
var cid = cm.getColumnId(i);
var align = '';
if(cm.config[i].align){
align = 'text-align:'+cm.config[i].align+';';
}
var hidden = '';
if(cm.isHidden(i)){
hidden = 'display:none;';
}
var width = "width:" + (cm.getColumnWidth(i) - this.borderWidth) + "px;";
ruleBuf.push(
this.colSelector, cid, " {\n", cm.config[i].css, align, width, "\n}\n",
this.hdSelector, cid, " {\n", align, width, "}\n",
this.tdSelector, cid, " {\n",hidden,"\n}\n",
this.splitSelector, cid, " {\n", hidden , "\n}\n");
}
return Ext.util.CSS.createStyleSheet(ruleBuf.join(""));
},
updateSplitters : function(){
var cm = this.cm, s = this.getSplitters();
if(s){ // splitters not created yet
var pos = 0, locked = true;
for(var i = 0, len = cm.getColumnCount(); i < len; i++){
if(cm.isHidden(i)) continue;
var w = cm.getColumnWidth(i);
if(!cm.isLocked(i) && locked){
pos = 0;
locked = false;
}
pos += w;
s[i].style.left = (pos-this.splitOffset) + "px";
}
}
},
handleHiddenChange : function(colModel, colIndex, hidden){
if(hidden){
this.hideColumn(colIndex);
}else{
this.unhideColumn(colIndex);
}
},
hideColumn : function(colIndex){
var cid = this.getColumnId(colIndex);
this.css.updateRule(this.tdSelector+cid, "display", "none");
this.css.updateRule(this.splitSelector+cid, "display", "none");
if(Ext.isSafari){
this.updateHeaders();
}
this.updateSplitters();
this.layout();
},
unhideColumn : function(colIndex){
var cid = this.getColumnId(colIndex);
this.css.updateRule(this.tdSelector+cid, "display", "");
this.css.updateRule(this.splitSelector+cid, "display", "");
if(Ext.isSafari){
this.updateHeaders();
}
this.updateSplitters();
this.layout();
},
insertRows : function(dm, firstRow, lastRow, isUpdate){
if(firstRow == 0 && lastRow == dm.getCount()-1){
this.refresh();
}else{
if(!isUpdate){
this.fireEvent("beforerowsinserted", this, firstRow, lastRow);
}
var s = this.getScrollState();
var markup = this.renderRows(firstRow, lastRow);
this.bufferRows(markup[0], this.getLockedTable(), firstRow);
this.bufferRows(markup[1], this.getBodyTable(), firstRow);
this.restoreScroll(s);
if(!isUpdate){
this.fireEvent("rowsinserted", this, firstRow, lastRow);
this.syncRowHeights(firstRow, lastRow);
this.stripeRows(firstRow);
this.layout();
}
}
},
bufferRows : function(markup, target, index){
var before = null, trows = target.rows, tbody = target.tBodies[0];
if(index < trows.length){
before = trows[index];
}
var b = document.createElement("div");
b.innerHTML = "<table><tbody>"+markup+"</tbody></table>";
var rows = b.firstChild.rows;
for(var i = 0, len = rows.length; i < len; i++){
if(before){
tbody.insertBefore(rows[0], before);
}else{
tbody.appendChild(rows[0]);
}
}
b.innerHTML = "";
b = null;
},
deleteRows : function(dm, firstRow, lastRow){
if(dm.getRowCount()<1){
this.fireEvent("beforerefresh", this);
this.mainBody.update("");
this.lockedBody.update("");
this.fireEvent("refresh", this);
}else{
this.fireEvent("beforerowsdeleted", this, firstRow, lastRow);
var bt = this.getBodyTable();
var tbody = bt.firstChild;
var rows = bt.rows;
for(var rowIndex = firstRow; rowIndex <= lastRow; rowIndex++){
tbody.removeChild(rows[firstRow]);
}
this.stripeRows(firstRow);
this.fireEvent("rowsdeleted", this, firstRow, lastRow);
}
},
updateRows : function(dataSource, firstRow, lastRow){
var s = this.getScrollState();
this.refresh();
this.restoreScroll(s);
},
handleSort : function(dataSource, sortColumnIndex, sortDir, noRefresh){
if(!noRefresh){
this.refresh();
}
this.updateHeaderSortState();
},
getScrollState : function(){
var sb = this.scroller.dom;
return {left: sb.scrollLeft, top: sb.scrollTop};
},
stripeRows : function(startRow){
if(!this.grid.stripeRows || this.ds.getCount() < 1){
return;
}
startRow = startRow || 0;
var rows = this.getBodyTable().rows;
var lrows = this.getLockedTable().rows;
var cls = ' x-grid-row-alt ';
for(var i = startRow, len = rows.length; i < len; i++){
var row = rows[i], lrow = lrows[i];
var isAlt = ((i+1) % 2 == 0);
var hasAlt = (' '+row.className + ' ').indexOf(cls) != -1;
if(isAlt == hasAlt){
continue;
}
if(isAlt){
row.className += " x-grid-row-alt";
}else{
row.className = row.className.replace("x-grid-row-alt", "");
}
if(lrow){
lrow.className = row.className;
}
}
},
restoreScroll : function(state){
var sb = this.scroller.dom;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -