跟我一起学extjs5(16--各种Grid列的自定义渲染)

跟我一起学extjs5(16--各种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;
					}

以过以上操作,各种类型的自定义渲染即可正确展示了。

跟我一起学extjs5(16--各种Grid列的自定义渲染)

时间: 2024-11-05 14:04:02

跟我一起学extjs5(16--各种Grid列的自定义渲染)的相关文章

15、手把手教你Extjs5(十五)各种Grid列的自定义渲染

Grid各列已经能够展示出来了.列的类型包括字符型,整型,浮点型,货币型,百分比型,日期型和布尔型,我自定义了各种类型的渲染样式: 1.整型:标题栏居中,数值靠右显示,正数颜色为蓝色,负数颜色为红色,0不显示. 2.浮点型:标题栏居中,数值靠右显示,正数颜色为蓝色,负数颜色为红色,显示二位小数,0不显示. 3.货币型:同浮点型,但是可以选择不同的单位,如元,千元,万元,百万元,亿元.数据有分节显示. 4.百分比型:自定义的一个百分比的显示,有数值和图像来形象的表示百分比. 5.日期型:显示格式为

跟我一起学extjs5(20--模块Grid的其他功能的设想,前20节源码)

跟我一起学extjs5(20--模块Grid的其他功能的设想,前20节源码) 经过对自定义模块和Grid的设计和编码,现在已经能对一个有配置信息的模块来生成界面并进行一些简单的CURD操作.由于这是一个全解释性的前台的架构,因此你想到的任何新主意都可以放到所有的模块中. 比如对于"Grid列宽的自动适应"这个功能,我们可以在系统设置项里加入"列宽自适应模式",下面有三个选项:1.不自动适应:2.首次加载数据时自动适应:3?每次加载数据都自动适应.因为列宽自动适应需要

跟我一起学extjs5(21--模块Grid的多列表方案)

跟我一起学extjs5(21--模块Grid的多列表方案) 对于有很多字段的模块在一个grid中显示所有的字段,会显得很臃肿,对于不同的用户其侧重的字段类型也不尽相同,因此就有必要为Grid的列表设计多个方案.在这个自定义系统进行设计的时候,我已经将这部分内容设计了进去,在ModuleModel.js中,在data下面有个属性tf_gridSchemes为数组型,你有多少种方案,都定义在这个下面就可以了,然后再创建一个控件可以根据这些定义来进行方案的选择,选择好以后让grid重新配置新的方案即可

跟我一起学extjs5(14--模块字段和Grid列的定义[1])

跟我一起学extjs5(14--模块字段和Grid列的定义[1]) 这一节加入模块自定义字段,并根据这些字段生成model.然后再定义grid中的分组和列.从这一切开始真正进入到了模块自定义的节奏当中,代码的复杂度和技巧性也大大提高.先从模块字段的自定义开始.先看一下ModuleModel.js中加入的新的定义: /** * 模块的数据模型 */ Ext.define('app.view.module.ModuleModel', { extend : 'Ext.app.ViewModel', a

跟我一起学extjs5(15--模块字段和Grid列的定义[2])

跟我一起学extjs5(15--模块字段和Grid列的定义[2]) model和columns生成好了,下面要修改一下Module.js和Grid.js中的代码,使其能够协同工作. /** * 一个模块的主控界面的容器,用来安放各个模块控件以及协调他们之间的关系 */ Ext.define('app.view.module.Module', { extend : 'Ext.panel.Panel', alias : 'widget.modulepanel', requires : ['app.v

跟我一起学extjs5(40--增加一个自定义模块[1建立表和bean文件])

跟我一起学extjs5(40--增加一个自定义模块[1建立表和bean文件]) 经过上面的工作,一个独立模块的CRUD已经可以运行了,为了更好的可以看到其他自定义功能,我们做一个自定义的独立模块,这个模块中包括了各种的数据类型. 新增一个"销售合同"的独立模块,模块名称为Agreement,里面包括了20几个字段,把主要的字段类型都设置了,有字符串型,整型,浮点型,金额型,日期型,布尔型,百分比,还包括计算字段. 建立表的sql语句如下: /****** 对象: Table [dbo]

跟我一起学extjs5(17--Grid金额字段单位MVVM方式的选择)

跟我一起学extjs5(17--Grid金额字段单位MVVM方式的选择) 这一节来完成Grid中的金额字段的金额单位的转换.转换旰使用MVVM特性,总体上和控制菜单的几种模式类似.首先在目录app/view/main/menu下建立文件Monetary.js,用于放金额单位的数据和生成菜单的items. /** * 金额单位的管理类 */ Ext.define('app.view.main.menu.Monetary', { statics : { values : null, getAllMo

跟我一起学extjs5(19--模块记录的拖放删除、拖放复制新增)

跟我一起学extjs5(19--模块记录的拖放删除.拖放复制新增) 网页其中的拖放(drag-drop)是比較有趣的操作,extjs5中非常好的封装了拖放的动作,也有各种类来支持,可是要学好"拖放"这个东西真是非常难,特别是象我这样英语不好的人.看不太懂官网上的说明,做一个拖放的操作起码得几天的时间. 以下完毕拖放删除的功能.即,选中一条记录或多条记录.然后拖动到"删除"button上.最后松开鼠标进行记录删除的操作.操作步骤: 1.给Grid添加新的配置,使其记录

跟我一起学extjs5(37--单个模块的设计[5取得模块列表数据])

跟我一起学extjs5(37--单个模块的设计[5取得模块列表数据]) 写了几个月,总算有点盼头了,最终要从后台取得数据了.后台的spring mvc 和 service 仅仅能简单的说说了,里面加了几十个类.有兴趣的下载了源代码自己看.以下画张通用的模块列表取数据的流程,这个流程是适用于全部的模块.我这个后台处理程序也是对全部的模块进行统一处理,包含数据查找,新增,改动,删除都是同样的. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamZvaw==