📄 grid.js
字号:
/**
* @cfg {Boolean} monitorWindowResize True to autoSize the grid when the window resizes. Default is true.
*/
monitorWindowResize : true,
/**
* @cfg {Boolean} maxRowsToMeasure If autoSizeColumns is on, maxRowsToMeasure can be used to limit the number of
* rows measured to get a columns size. Default is 0 (all rows).
*/
maxRowsToMeasure : 0,
/**
* @cfg {Boolean} trackMouseOver True to highlight rows when the mouse is over. Default is true.
*/
trackMouseOver : true,
/**
* @cfg {Boolean} enableDragDrop True to enable drag and drop of rows. Default is false.
*/
enableDragDrop : false,
/**
* @cfg {Boolean} enableColumnMove True to enable drag and drop reorder of columns. Default is true.
*/
enableColumnMove : true,
/**
* @cfg {Boolean} enableColumnHide True to enable hiding of columns with the header context menu. Default is true.
*/
enableColumnHide : true,
/**
* @cfg {Boolean} enableRowHeightSync True to manually sync row heights across locked and not locked rows. Default is false.
*/
enableRowHeightSync : false,
/**
* @cfg {Boolean} stripeRows True to stripe the rows. Default is true.
*/
stripeRows : true,
/**
* @cfg {Boolean} autoHeight True to fit the height of the grid container to the height of the data. Default is false.
*/
autoHeight : false,
/**
* @cfg {String} autoExpandColumn The id of a column in this grid that should expand to fill unused space. This id can not be 0. Default is false.
*/
autoExpandColumn : false,
/**
* @cfg {Number} autoExpandMin The minimum width the autoExpandColumn can have (if enabled).
* Default is 50.
*/
autoExpandMin : 50,
/**
* @cfg {Number} autoExpandMax The maximum width the autoExpandColumn can have (if enabled). Default is 1000.
*/
autoExpandMax : 1000,
/**
* @cfg {Object} view The {@link Ext.grid.GridView} used by the grid. This can be set before a call to render().
*/
view : null,
/**
* @cfg {Object} loadMask An {@link Ext.LoadMask} config or true to mask the grid while loading. Default is false.
*/
loadMask : false,
// private
rendered : false,
/**
* @cfg {Number} maxHeight Sets the maximum height of the grid - ignored if autoHeight is not on.
*/
/**
* Called once after all setup has been completed and the grid is ready to be rendered.
* @return {Ext.grid.Grid} this
*/
render : function(){
var c = this.container;
// try to detect autoHeight/width mode
if((!c.dom.offsetHeight || c.dom.offsetHeight < 20) || c.getStyle("height") == "auto"){
this.autoHeight = true;
}
var view = this.getView();
view.init(this);
c.on("click", this.onClick, this);
c.on("dblclick", this.onDblClick, this);
c.on("contextmenu", this.onContextMenu, this);
c.on("keydown", this.onKeyDown, this);
this.relayEvents(c, ["mousedown","mouseup","mouseover","mouseout","keypress"]);
this.getSelectionModel().init(this);
view.render();
if(this.loadMask){
this.loadMask = new Ext.LoadMask(this.container,
Ext.apply({store:this.dataSource}, this.loadMask));
}
this.rendered = true;
this.fireEvent('render', this);
return this;
},
reconfigure : function(dataSource, colModel){
if(this.loadMask){
this.loadMask.destroy();
this.loadMask = new Ext.LoadMask(this.container,
Ext.apply({store:dataSource}, this.loadMask));
}
this.view.bind(dataSource, colModel);
this.dataSource = dataSource;
this.colModel = colModel;
this.view.refresh(true);
},
onKeyDown : function(e){
this.fireEvent("keydown", e);
},
/**
* Destroy this grid.
* @param {Boolean} removeEl True to remove the element
*/
destroy : function(removeEl, keepListeners){
if(this.loadMask){
this.loadMask.destroy();
}
var c = this.container;
c.removeAllListeners();
this.view.destroy();
this.colModel.purgeListeners();
if(!keepListeners){
this.purgeListeners();
}
c.update("");
if(removeEl === true){
c.remove();
}
},
// private
processEvent : function(name, e){
this.fireEvent(name, e);
var t = e.getTarget();
var v = this.view;
var header = v.findHeaderIndex(t);
if(header !== false){
this.fireEvent("header" + name, this, header, e);
}else{
var row = v.findRowIndex(t);
var cell = v.findCellIndex(t);
if(row !== false){
this.fireEvent("row" + name, this, row, e);
if(cell !== false){
this.fireEvent("cell" + name, this, row, cell, e);
}
}
}
},
// private
onClick : function(e){
this.processEvent("click", e);
},
// private
onContextMenu : function(e, t){
this.processEvent("contextmenu", e);
},
// private
onDblClick : function(e){
this.processEvent("dblclick", e);
},
walkCells : function(row, col, step, fn, scope){
var cm = this.colModel, clen = cm.getColumnCount();
var ds = this.dataSource, rlen = ds.getCount(), first = true;
if(step < 0){
if(col < 0){
row--;
first = false;
}
while(row >= 0){
if(!first){
col = clen-1;
}
first = false;
while(col >= 0){
if(fn.call(scope || this, row, col, cm) === true){
return [row, col];
}
col--;
}
row--;
}
} else {
if(col >= clen){
row++;
first = false;
}
while(row < rlen){
if(!first){
col = 0;
}
first = false;
while(col < clen){
if(fn.call(scope || this, row, col, cm) === true){
return [row, col];
}
col++;
}
row++;
}
}
return null;
},
getSelections : function(){
return this.selModel.getSelections();
},
/**
* Causes the grid to manually recalculate its dimensions. Generally this is done automatically,
* but if manual update is required this method will initiate it.
*/
autoSize : function(){
if(this.rendered){
this.view.layout();
if(this.view.adjustForScroll){
this.view.adjustForScroll();
}
}
},
getGridEl : function(){
return this.container;
},
// private for compatibility, overridden by editor grid
stopEditing : function(){},
/**
* Returns the grid's SelectionModel.
* @return {SelectionModel}
*/
getSelectionModel : function(){
if(!this.selModel){
this.selModel = new Ext.grid.RowSelectionModel();
}
return this.selModel;
},
/**
* Returns the grid's DataSource.
* @return {DataSource}
*/
getDataSource : function(){
return this.dataSource;
},
/**
* Returns the grid's ColumnModel.
* @return {ColumnModel}
*/
getColumnModel : function(){
return this.colModel;
},
/**
* Returns the grid's GridView object.
* @return {GridView}
*/
getView : function(){
if(!this.view){
this.view = new Ext.grid.GridView(this.viewConfig);
}
return this.view;
},
/**
* Called to get grid's drag proxy text, by default returns this.ddText.
* @return {String}
*/
getDragDropText : function(){
var count = this.selModel.getCount();
return String.format(this.ddText, count, count == 1 ? '' : 's');
}
});
/**
* Configures the text is the drag proxy (defaults to "%0 selected row(s)").
* %0 is replaced with the number of selected rows.
* @type String
*/
Ext.grid.Grid.prototype.ddText = "{0} selected row{1}";
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -