最近项目使用Ext,其中Grid的操作列使用了扩展Ext.ux.grid.RowActions,但在IE下有点问题,单击按钮时,不会自动选中该行,能正确触发事件,其实也不会是问题。
今天偶然发现原来Ext中就有一个叫Ext.grid.ActionColumn的列类型。看了下与RowActions很相似,但只能显示图标且不接受iconCls,只接受图片路径,于是把RowActions的搬了来过与扩展ActionColumn,这样ActionColumn就像RowActions一样了,使用上更方便,因为RowActions是plugin
扩展代码如下:
文件:Ext.ux.grid.ActionColumn.js
Ext.ns("Ext.ux.grid");
/**
* 结合rowAction和ActionColumn写的图标操作列
* 示例:<pre><code>
* {
xtype:'uxactioncolumn',
header:this.actionColumnHeader,
autoWidth:false,
width:this.actionColumnWidth,
items: [{
iconCls:'icon-edit',
tooltip:'示例',
text:'示例',
stopSelection:false,
scope:this,
handler:function(grid, rowIndex, colIndex){
this.onUpdate();
}
}
</code></pre>
* @class Ext.ux.grid.ActionColumn
* @extends Ext.grid.ActionColumn
*/
Ext.ux.grid.ActionColumn = Ext.extend(Ext.grid.ActionColumn, {
constructor: function(cfg) {
var me = this,
items = cfg.items || (me.items = [me]),
l = items.length,
i,
item;
Ext.grid.ActionColumn.superclass.constructor.call(me, cfg);
// Renderer closure iterates through items creating an <img> element for each and tagging with an identifying
// class name x-action-col-{n}
me.renderer = function(v, meta) {
// Allow a configured renderer to create initial value (And set the other values in the "metadata" argument!)
v = Ext.isFunction(cfg.renderer) ? cfg.renderer.apply(this, arguments)||'' : '';
meta.css += ' x-action-col-cell';
for (i = 0; i < l; i++) {
item = items[i];
var cls = Ext.isFunction(item.getClass) ? item.getClass.apply(item.scope||this.scope||this, arguments) : '';
var tooltip = item.tooltip ? (' ext:qtip="' + item.tooltip + '"') : '';
v+='<div class="ux-action-col-item '+(item.iconCls||'')+' x-action-col-' + String(i) + ' '
+ (item.text? 'ux-action-col-text ':'')
+ cls + '"'
+ tooltip +' >'
+ (item.text? '<span '+ tooltip +'>'+item.text+'</span>':'')
+'</div>';
}
return v;
};
},
// constructor: function(cfg) {
// var me = this,
// items = cfg.items || (me.items = [me]),
// l = items.length,
// i,
// item;
//
// Ext.grid.ActionColumn.superclass.constructor.call(me, cfg);
//
//// Renderer closure iterates through items creating an <img> element for each and tagging with an identifying
//// class name x-action-col-{n}
// me.renderer = function(v, meta) {
//// Allow a configured renderer to create initial value (And set the other values in the "metadata" argument!)
// v = Ext.isFunction(cfg.renderer) ? cfg.renderer.apply(this, arguments)||'' : '';
//
// meta.css += ' x-action-col-cell';
// for (i = 0; i < l; i++) {
// item = items[i];
// v += '<img alt="' + (item.altText || me.altText) + '" src="' + (item.icon || Ext.BLANK_IMAGE_URL) +
// '" class="x-action-col-icon x-action-col-' + String(i) + ' ' + (item.iconCls || '') +
// ' ' + (Ext.isFunction(item.getClass) ? item.getClass.apply(item.scope||this.scope||this, arguments) : '') + '"' +
// ((item.tooltip) ? ' ext:qtip="' + item.tooltip + '"' : '') + ' />';
// }
// return v;
// };
// },
processEvent : function(name, e, grid, rowIndex, colIndex){
var t = e.getTarget('.ux-action-col-item');
if(t){
var m = t.className.match(this.actionIdRe),item, fn;
if (m && (item = this.items[parseInt(m[1], 10)])) {
if (name == 'click') {
(fn = item.handler || this.handler) && fn.call(item.scope||this.scope||this, grid, rowIndex, colIndex, item, e);
} else if ((name == 'mousedown') && (item.stopSelection !== false)) {
return false;
}
}
}
return Ext.grid.ActionColumn.superclass.processEvent.apply(this, arguments);
}
});
Ext.apply(Ext.grid.Column.types, {
uxactioncolumn : Ext.ux.grid.ActionColumn
});
CSS文件:Ext.ux.grid.ActionColumn.css
/* styles for rows */
.ux-action-col-cell .x-grid3-cell-inner {
padding:1px 0 0 0;
}
.ux-action-col-item {
float:left;
min-width:16px;
height:16px;
background-repeat:no-repeat;
margin: 0 3px 0 2px;
/* margin: 1px 5px 0 2px; */
cursor:pointer;
overflow:hidden;
}
.ext-ie .ux-action-col-item {
width:16px;
}
.ext-ie .ux-action-col-text {
width:auto;
}
.ux-action-col-item span {
vertical-align:middle;
/** modify by wukq at 2012-03-28 **/
padding:0 0 0 18px;
/**padding:0 0 0 20px;**/
line-height:18px;
}
.ext-ie .ux-action-col-item span {
width:auto;
}
使用时,在grid的columns中配置项就行:
{
xtype:'uxactioncolumn',
header:'操作',
autoWidth:false,
width:80,
items: [{
iconCls:'icon-edit',
tooltip:'示例',
text:'示例',
stopSelection:false,
scope:this,
handler:function(grid, rowIndex, colIndex){
this.onUpdate();
}
}
或
{
name:'pingResult',
xtype:'uxactioncolumn',
header:'ping结果',
autoWidth:false,
sortable : true,
width:50,
items: [
{
getClass: function(html, meta, rec) { // Or return a class from a function
var v = rec.get("pingResult");
if (v == 1) {
this.items[0].tooltip = '通';
return 'icon-circle-green';
}else{
this.items[0].tooltip = '不通';
return 'icon-circle-red';
}
}
}
]
}
分享到:
相关推荐
就是extjs4里面,想给grid里面一格中,文字后面加个小图标。 因为俺们项目就只是文字+图标,所以俺就没有复写Actioncolumn,而是从Column下面继承了一下。。 包含自定义插件源码、效果图等等。
ExtJS Grid是一个强大的数据展示组件,它允许用户以表格的形式查看和操作大量数据。在实际应用中,数据过滤是常见的需求,以便用户能快速定位到感兴趣的信息。本篇将深入探讨ExtJS Grid的过滤操作,以及如何动态地对...
NULL 博文链接:https://xiaomy.iteye.com/blog/2280263
在EXTJS中,Grid组件是一个强大的数据展示工具,它允许用户以表格形式查看和操作大量数据。在EXTJS 3.2.0版本中,Grid提供了一个功能,可以将其中的数据导出到Microsoft Excel文件中,方便进一步的数据分析和处理。 ...
在给定的文件名`ExtJs Grid是否选择行.png`中,可能包含了一张图片,展示了Grid选择行的界面或者选择操作的示例。由于无法直接查看图片内容,这部分具体信息需要结合实际图片进行解释。 总的来说,理解并掌握ExtJs ...
具体实现时,开发者可能会在EXTJS的事件处理器中添加导出功能,例如在Grid的工具栏上添加一个“导出”按钮,当点击该按钮时触发数据导出的函数。这个函数会按照上述步骤操作,最终生成一个可供下载的Excel文件。 在...
根据提供的文件信息以及标题与描述,本文将详细探讨Extjs Grid的操作大全,特别是关于如何获取Grid中的各种值以及如何添加各种点击事件。 ### Extjs Grid 操作大全 #### 一、Extjs Grid简介 Extjs 是一个用...
### ExtJs Grid 多选及获取选中值详解 #### 一、背景介绍 在Web应用开发中,ExtJs 是一款非常强大的JavaScript框架,它能够帮助开发者快速构建复杂的用户界面。其中,Grid Panel(简称 Grid)是ExtJs中最常用的一个...
EXTJS Grid是EXTJS库中的一个核心组件,用于创建数据密集型的表格视图,它在Web应用程序中常用于展示和操作大量结构化数据。EXTJS Grid提供了丰富的功能,包括分页、排序、过滤、编辑等,使得用户可以高效地管理和...
ExtJS Grid是Sencha ExtJS框架中的一个核心组件,它用于构建数据驱动的表格视图。Grid组件在Web应用中广泛使用,因为它提供了强大的数据展示、排序、分页、筛选和编辑功能。以下是对`ExtJS Grid`示例代码的详细解析...
EXTJS Grid是一款强大的数据展示组件,广泛应用于Web应用开发中,尤其在数据密集型界面设计时,EXTJS Grid以其高效的数据加载、灵活的分页、排序、过滤和自定义功能而受到开发者青睐。本总结例子将深入探讨EXTJS ...
ExtJS Grid 分页是Web应用中数据展示的重要组成部分,它允许用户高效地浏览大量数据而无需一次性加载所有记录。在本文中,我们将深入探讨ExtJS Grid的分页功能及其实现方式。 首先,ExtJS Grid是一种强大的...
ExtJS Grid是一款强大的数据展示组件,常用于构建复杂的Web应用程序中的数据网格。多表头插件是ExtJS Grid的一个重要特性,它允许我们创建具有多层次、复杂结构的表头,以便更好地组织和呈现数据。在ExtJS Grid中,...
在EXTJS开发中,我们经常会遇到使用Grid组件展示数据的情况,特别是当数据包含中文字符时,可能会遇到排序问题。EXTJS Grid默认的排序机制对于英文字符处理得较好,但对于中文字符,由于编码和比较规则的不同,可能...
ExtJS Grid是一个强大的数据展示组件,它在Web应用程序中用于显示和操作大量数据。Grid提供了丰富的功能,包括分页、排序、过滤、编辑等,是ExtJS库中的核心组件之一。"Extjs Grid 扩展实例"是一个演示如何增强Grid...
1.ExtJS自定义组件,图片按钮为例. 2.此图片按钮背景完全为图片,没有边框,需要使用者提供2张图片,一张初始化用,一张点击后用,可在'imgPaths:'属性里填写,格式为'01.jpg~02.jpg' 3.解压后请将所有附件放置您extjs...
这是利用sencha cmd 生成的GridFilterDemo工程中的app和build文件夹,其余文件过大并且与主题无关,因此未包含。具体方法,请参看我的博客: 《Extjs4.2 Grid Filter Feature 表格过滤特性》
- **Grid Panel**:是ExtJS中的一个核心组件,用于显示二维数据,可以进行排序、筛选、分页等操作。 - **Store**:存储Grid的数据,可以是从服务器获取的JSON、XML或Array格式的数据,也可以是本地数据。 - **...
很多同事在用extjs grid做分页的时候,往往会想用grid的多选功能来实现导出Excel之类的功能(也就是所谓的多选记忆功能),但在选选择下一页的时候 上一页选中的已经清除 这是因为做分页的时候又向服务器请求了分页...
Grid是ExtJS中的核心组件,它提供了一种灵活的方式来展示和操作数据集。在ExtJS4中,有时我们需要实现打印Grid的功能,以便用户能够将屏幕上的数据显示在纸质或PDF文档上。这就是"extjs4打印grid插件"的作用。 打印...