15、手把手教你Extjs5(十五)各种Grid列的自定义渲染
Grid各列已经能够展示出来了。列的类型包括字符型,整型,浮点型,货币型,百分比型,日期型和布尔型,我自定义了各种类型的渲染样式:
1、整型:标题栏居中,数值靠右显示,正数颜色为蓝色,负数颜色为红色,0不显示。
2、浮点型:标题栏居中,数值靠右显示,正数颜色为蓝色,负数颜色为红色,显示二位小数,0不显示。
3、货币型:同浮点型,但是可以选择不同的单位,如元,千元,万元,百万元,亿元。数据有分节显示。
4、百分比型:自定义的一个百分比的显示,有数值和图像来形象的表示百分比。
5、日期型:显示格式为 Y-m-d,颜色为暗黄色。
下面先看一下完成的结果。

下面来生成这些字段的自定义Renderer的函数。在app/ux/下建立文件Renderer.js。
/**
* 这里存放了Grid的列renderer的各种自定义的方法
*/ Ext.onReady(function () { // 可以制作一个控件,来修改这二个属性,达到可以修改金额单位的目的
Ext.monetaryText = '万'; // 加在数字后面的金额单位
Ext.monetaryUnit = 10000; // Ext.monetary = '亿';
// Ext.monetaryUnit = 10000*10000; if (Ext.util && Ext.util.Format) { Ext.apply(Ext.util.Format, { // 金额字段
monetaryRenderer: function (val) {
if (val) {
if (Ext.monetaryUnit && Ext.monetaryUnit != 1)
val = val / Ext.monetaryUnit;
// 正数用蓝色显示,负数用红色显示
return '<span style="color:' + (val > 0 ? 'blue' : 'red')
+ ';float:right;">' + Ext.util.Format.number(val, '0,000.00')
+ Ext.monetaryText + '</span>';
} else
return ''; // 如果为0,则不显示
}, // 日期
dateRenderer: function (val) {
return '<span style="color:#a40;">'
+ Ext.util.Format.date(val, 'Y-m-d') + '</span>';
}, // 整型变量
floatRenderer: function (val, rd, model, row, col, store, gridview) {
return '<span style="color:' + (val > 0 ? 'blue' : 'red')
+ ';float:right;">' + (val == 0 ? '' : val) + '</span>';
}, // 整型变量
intRenderer: function (val, rd, model, row, col, store, gridview) {
return '<span style="color:' + (val > 0 ? 'blue' : 'red')
+ ';float:right;">' + (val == 0 ? '' : val) + '</span>';
}, // 百分比
percentRenderer: function (v, rd, model) {
v = v * 100;
var v1 = v > 100 ? 100 : v;
v1 = v1 < 0 ? 0 : v1;
var v2 = parseInt(v1 * 2.55).toString(16);
if (v2.length == 1)
v2 = '0' + v2;
return Ext.String
.format(
'<div>'
+ '<div style="float:left;border:1px solid #008000;height:15px;width:100%;">'
+ '<div style="float:left;text-align:center;width:100%;color:blue;">{0}%</div>'
+ '<div style="background: #FAB2{2};width:{1}%;height:13px;"></div>'
+ '</div></div>', v, v1, v2);
}, // 对模块的namefields字段加粗显示
nameFieldRenderer: function (val, rd, model, row, col, store, gridview) {
return ('<strong>' + val + '</strong>');
} })
};
});
这个文件在调用的时候不能用uses或者requires来加入,需要在html中引入。在extjs5中,可以直接修改/war/下的app.json和bootstrap.json来入。首先打开app.json,找到 “js“的字义处,首先加入国际化的中文包,然后再加入Renderer.js。加好后如下:
"js": [
{
"path": "app.js",
"bundle": true
} , {
"path": "ext/packages/ext-locale/build/ext-locale-zh_CN.js"
} , {
"path": "app/ux/Renderer.js"
}
],
打开bootstrap.json,这个文件很大,打开后先进行格式化,然后移动的文件最后,加入上面二个js文件。(如果这一步不想手工操作,你可以用 'sencha app build' 命令来自动生成最新的bootstrap.json)。

修改好上面二个json的配置文件以后,需要在ColumnFactory.js中加入对应的渲染方式。下面只列出了该文件中的部分代码:
switch (fd.tf_fieldType) {
case 'Date':
Ext.apply(field, {
xtype: 'datecolumn',
align: 'center',
width: 100,
formatter: 'dateRenderer', // 定义在Ext.util.Format中的渲染函数可以用这种方法调用
editor: { // 如果需要行内修改,需要加入此属性
xtype: 'datefield',
format: 'Y-m-d',
editable: false
}
});
break;
case 'Datetime':
Ext.apply(field, {
xtype: 'datecolumn',
align: 'center',
width: 130,
formatter: 'dateRenderer'
});
break;
case 'Boolean':
field.xtype = 'checkcolumn';
field.stopSelection = false;
field.processEvent = function (type) { // 加入这一句,可以防止点中修改
if (type == 'click')
return false;
};
break;
case 'Integer':
Ext.apply(field, {
align: 'center',
xtype: 'numbercolumn',
tdCls: 'intcolor',
format: '#',
formatter: 'intRenderer',
editor: {
xtype: 'numberfield'
}
});
break;
case 'Double':
Ext.apply(field, {
align: 'center',
xtype: 'numbercolumn',
width: 110,
// renderer : Ext.util.Format.monetary, //这种方法和下面的方法是一样的
formatter: fd.tf_isMoney // 判断是否是金额类型的
? 'monetaryRenderer'
: 'floatRenderer', // 这种方法也可以
editor: {
xtype: 'numberfield'
}
});
break;
case 'Float':
Ext.apply(field, {
align: 'center',
xtype: 'numbercolumn',
width: 110,
formatter: 'floatRenderer' // 这种方法也可以
});
break;
case 'Percent':
Ext.apply(field, {
align: 'center',
formatter: 'percentRenderer',
// xtype : 'widgetcolumn', // 这里注释掉的是extjs5自带的百分比类型的显示方法
// widget : {
// xtype : 'progressbarwidget',
// textTpl : ['{percent:number("0.00")}%']
// },
editor: {
xtype: 'numberfield',
step: 0.01
},
width: 110 // 默认宽度
})
break;
case 'String':
// 如果这个字段是此模块的nameFields则加粗显示
if (module.get('tf_nameFields') == fd.tf_fieldName)
Ext.apply(field, {
text: '<strong>' + fd.tf_title + '</strong>',
formatter: 'nameFieldRenderer'
});
else
Ext.apply(field, {});
break;
default:
break;
}
以过以上操作,各种类型的自定义渲染即可正确展示了。
15、手把手教你Extjs5(十五)各种Grid列的自定义渲染的更多相关文章
- 手把手教你mysql(十)索引
手把手教你mysql(十)索引 一:索引的引入 索引定义:索引是由数据库表中一列或者多列组合而成,其作用是提高对表中数据的查询速度. 类似于图书的目录,方便快速定位,寻找指定的内容,如一本1000页的 ...
- 25、手把手教你Extjs5(二十五)Extjs5常用组件--form的基本用法
Extjs Form是一个比较常用的控件,主要用来显示和编辑数据的,今天这篇文章将介绍Extjs Form控件的详细用法,包括创建Form.添加子项.加载和更新数据.验证等. Form和Form Ba ...
- 18、手把手教你Extjs5(十八)模块记录的拖放删除、拖放复制新增
网页当中的拖放(drag-drop)是比较有趣的操作,extjs5中很好的封装了拖放的动作,也有各种类来支持,但是要学好“拖放”这个东西真是很难,特别是象我这样英语不好的人,看不太懂官网上的说明,做一 ...
- 24、手把手教你Extjs5(二十四)模块Form的自定义的设计[3]
自定义的Form已经可以运行了,下面改一下配置,把Form里面的FieldSet放在Tab之下.修改一下ModuleModel.js中的data下的tf_FormSchemes下的方案,增加一个属性. ...
- 22、手把手教你Extjs5(二十二)模块Form的自定义的设计[1]
下面开始设计和完成一个简单的Form的自定义过程.先准备数据,在ModuleModel.js中的data属性下面,加入自定义Form的参数定义,下面的代码中定义了一个新的属性tf_formScheme ...
- 20、手把手教你Extjs5(二十)模块Grid的多列表方案
对于有很多字段的模块在一个grid中显示所有的字段,会显得很臃肿,对于不同的用户其侧重的字段类型也不尽相同,因此就有必要为Grid的列表设计多个方案.在这个自定义系统进行设计的时候,我已经将这部分内容 ...
- 19、手把手教你Extjs5(十九)模块Grid的其他功能的设想
经过对自定义模块和Grid的设计和编码,现在已经能对一个有配置信息的模块来生成界面并进行一些简单的CURD操作.由于这是一个全解释性的前台的架构,因此你想到的任何新主意都可以放到所有的模块中. 比如对 ...
- 16、手把手教你Extjs5(十六)Grid金额字段单位MVVM方式的选择
这一节来完成Grid中的金额字段的金额单位的转换.转换旰使用MVVM特性,总体上和控制菜单的几种模式类似.首先在目录app/view/main/menu下建立文件Monetary.js,用于放金额单位 ...
- 14、手把手教你Extjs5(十四)模块字段和Grid列的定义[2]
model和columns生成好了,下面要修改一下Module.js和Grid.js中的代码,使其能够协同工作. /** * 一个模块的主控界面的容器,用来安放各个模块控件以及协调他们之间的关系 */ ...
随机推荐
- [转]理解SSL(https)中的对称加密与非对称加密
加密 解密 Tweet 密码学最早可以追溯到古希腊罗马时代,那时的加密方法很简单:替换字母. 早期的密码学 古希腊人用一种叫 Scytale 的工具加密.更快的工具是 transposition ...
- POJ 2289 Jamie's Contact Groups
二分答案+网络最大流 #include<cstdio> #include<cstring> #include<cmath> #include<vector&g ...
- ZooKeeper应用理论及其应用场景
ZooKeeper Client APIZooKeeper Client Library提供了丰富直观的API供用户程序使用,下面是一些常用的API: ● create(path, data, fla ...
- java监控函数执行时间
java监控函数执行时间 http://blog.csdn.net/ycg01/article/details/1467542 java监控函数执行时间 标签: javathreadclassstri ...
- zf-关于业务量图表没有出现统计柱形图问题
是实现类里的 objs[0] = ht.get("BUS_NAME");objs[1] = ht.get("NUM"); 这个写成小写了 改成大写即可,原来这个 ...
- 简单查询plan
-> alter session set statistics_level=all; select /*+ gathe_plan_statistics */ * from ts.ts_recor ...
- 【贪心】时空定位II
[贪心]时空定位II 题目描述 有一块空间,横向长w,纵向长为h,在它的横向中心线上不同位置处装有n(n≤10000)个点状的定位装置,每个定位装置i定位的效果是让以它为中心半径为Ri的圆都被覆盖.请 ...
- UIApearance
转载自:http://www.cocoachina.com/ios/20150723/12671.html 文章开头先援引一下Mattt Thompson大神在UIApearance里的一句话吧: 1 ...
- FTP 1.0
自己写的可以实现文件的下载(必须自己知道文件名),还有很多要优化. 譬如:不能看可以下载的文件,输入错误无法处理,不能处理多个用户,每次只能下载一个结束,服务器没有完成守护进程:没有用函数封装,简化m ...
- 转:Web 测试的创作与调试技术
摘要:学习有关 Visual Studio 2005 Web 测试的更多知识,包括 Web 测试引擎和记录器如何工作,以及如何创建有效的 Web 测试. 本页内容 读者 简介 记录一个 Web 测试 ...