跟我一起学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列的自己定义渲染)的更多相关文章

  1. 跟我一起学extjs5(22--模块Form的自己定义的设计)

    跟我一起学extjs5(22--模块Form的自己定义的设计)         前面几节完毕了模块Grid的自己定义,模块Form自己定义的过程和Grid的过程类似,可是要更复杂一些.先来设计一下要完 ...

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

    跟我一起学extjs5(17--Grid金额字段单位MVVM方式的选择)         这一节来完毕Grid中的金额字段的金额单位的转换.转换旰使用MVVM特性,整体上和控制菜单的几种模式类似.首先 ...

  3. 跟我一起学extjs5(18--模块的新增、改动、删除操作)

    跟我一起学extjs5(18--模块的新增.改动.删除操作)         上节在Grid展示时做了一个金额单位能够手工选择的功能,假设你要增加其它功能.也仅仅要依照这个模式来操作即可了,比方说你想 ...

  4. 跟我一起学extjs5(24--模块Form的自己定义的设计[2])

    跟我一起学extjs5(24--模块Form的自己定义的设计[2])         在本节中将要增加各种类型的字段,在增加字段的时候因为能够一行增加多个字段,因此层次结构又多了一层fieldcont ...

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

    跟我一起学extjs5(19--模块记录的拖放删除.拖放复制新增)         网页其中的拖放(drag-drop)是比較有趣的操作,extjs5中非常好的封装了拖放的动作,也有各种类来支持,可是 ...

  6. 跟我一起学extjs5(11--自己定义模块的设计)

    跟我一起学extjs5(11--自己定义模块的设计)        从这一节開始我们来设计并完毕一个自己定义模块.我们先来确定一个独立的模块的所能定义的一些模块信息. 下面信息仅仅是我自己在开发过程中 ...

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

    跟我一起学extjs5(37--单个模块的设计[5取得模块列表数据])         写了几个月,总算有点盼头了,最终要从后台取得数据了.后台的spring mvc 和 service 仅仅能简单的 ...

  8. [转]跟我一起学extjs5(02--建立工程项目)

    原文地址:http://blog.csdn.net/jfok/article/details/35569057 目录(?)[+] 跟我一起学extjs5(02--建立工程项目) 我们先建立一个java ...

  9. 跟我一起学extjs5(05--主界面上增加顶部和底部区域)

    跟我一起学extjs5(05--主界面上增加顶部和底部区域)         这一节为主界面加一个顶部区域和底部区域. 一个管理系统的界面能够粗分为顶部标题部分.中间数据展示和处理的部分.底部备注和状 ...

随机推荐

  1. SQL Server 分离与附加数据库

    前期准备: 创建数据库 create database Studio     on primary     (name ='Studio',filename ='E:\Studio.mdf'),    ...

  2. Hibernate的Criteria用法

    在hibernate的Session里面使用createCriteria可以创建一个Criteria实例帮助我们进行条件查询,不用自己串hql语句,很方便. 用法很简单,首先传Class实例创建Cri ...

  3. Paas

    bae sae PowerApp 还有啥???

  4. 为啥都不用Qt Quick Controls 2呢

     为啥都不用Qt Quick Controls 2呢  https://github.com/qt/qtquickcontrols2/ 

  5. MYSQLinsert速度过慢

    MYSQLinsert速度过慢最近在用MySQL做存储,测试中发现插入数据太慢了,插入速度只有20 MY SQL insert 速度过慢最近在用MySQL做存储,测试中发现插入数据太慢了,插入速度只有 ...

  6. ACM学习-POJ-1004-Financial Management

    菜鸟学习ACM,纪录自己成长过程中的点滴. 学习的路上,与君共勉. ACM学习-POJ-1003-Financial Management Financial Management Time Limi ...

  7. Spring、Spring事务详解;使用XML配置事务

    @Transactional可以设置以下参数: @Transactional(readOnly=false) // 指定事务是否只读的 true/false @Transactional(rollba ...

  8. 共享参数ContentProvider 类与数据库绑定,如何通过共享参数测试类,测试数据库的增删改查功能

    Intent可以传一个对象 当两个界面之间跳转时,需要传递一个对象过去,是通过使用Bundle类,并且实体类需要serializable实现序列化,传递方法如下: 定义一个静态常量作为key值 pub ...

  9. 关于oracle的certview

    前两天去参加oracle  11g  的两门考试(1Z0-051和1Z0-052),在家看了好几遍题库,我本来想着上午一门,下午考一门,但是我嫌着麻烦,就预约一下午考完两门.在考试完一门后,发现成绩不 ...

  10. oracle转换数字到格式化字符串

    问题描写叙述 oracle假设存储number(20,2)数据,0数据库中为0.00,2.1数据库中为2.10,3.88存储为3.88, 假设直接从数据库中取出相应显示为: 0 2.1 3.88 保留 ...