Ext JS - renderer 函數


renderer 函數是一個攔截者模式,用於改變渲染到單元格的值和樣式。

http://docs-devel.sencha.com/extjs/4.2.2/#!/api/Ext.grid.column.Column-cfg-renderer Ext JS 4.2 官方文檔

Defaults to: false

  • value : Object

    The data value for the current cell 當前單元格數據的值

  • metaData : Object

    A collection of metadata about the current cell; can be used or modified by the renderer. Recognized properties are: tdCls, tdAttr, and style.

    當前單元格的元數據集合,通過渲染器可以直接使用或者修改其部分屬性值,常用的屬性有:tdCls、tdAttr、style。

  • record : Ext.data.Model

    The record for the current row 單元格所在當前行的所有數據記錄(record)

    若要取得 dataIndex: 'age' 的值,方式如下: record.get('age'); 、 record.data.age; record.data['age']; 、 record.raw.age; record.raw['age']; 

    可以 console.log(record); 來查看 record 下面的值,有 data、events、hasListeners、modified、raw、store、stores

  • rowIndex : Number

    The index of the current row 當前行號

  • colIndex : Number

    The index of the current column 當前列號

  • store : Ext.data.Store

    The data store 當前 grid 的數據集(store)

  • view : Ext.view.View

    The current view 當前 grid 所屬視圖(view)

  • return : String

    The HTML string to be rendered. 返回一個被渲染的 HTML 文本串

 

可以打印下,看看每個參數下面都包含什么。 

 

實戰案例:GridPanel 中,對 Columns 進行渲染,效果如下:

 

JSP 頁面 CSS(ext 頁面是通過當前 JSP 頁面,引入一條 js 文件,ext 代碼寫在此 js 中,構造 ext 界面)

F12 調試時,選擇元素,查看到當前表格數據的 class

這個是 metaData 下面的 tdCls 屬性值

 如果對表格數據做樣式調整的話,可以利用 metaData 下的屬性 tdCls 的 class 進行 css 操作

<style type="text/css">
	/** 企業信用評價結果公布復核等級名稱:黃牌藍牌等 */
	.x-grid-cell.greencard {
		background-color: #B6FFA8;
	}
	.x-grid-cell.bluecard {
		background-color: #D7E7FC;
	}
	.x-grid-cell.yellowcard {
		background-color: #FEFAD7;
	}
	.x-grid-cell.redcard {
		background-color: #F4B6B6;
	}
	.x-grid-cell.blackcard {
		background-color: #000000;
		color:white;
	}
</style>

 

Ext.grid.Panel 的 renderer 函數

{
	text: '處理結果',
	dataIndex: 'fhdjmc', // 復核等級名稱
	flex: 1,
	renderer: function (value, metaData) {
		if (value == null || value == '') {
			return '無牌';
		}
		// tdCls: x-grid-cell的樣式
		// 例如: x-grid-cell.greencard {background-color: #B6FFA8;}
		metaData.tdCls = value == '綠牌' ? 'greencard' : (value == '藍牌' ? 'bluecard' : (value == '黃牌' ? 'yellowcard' : (value == '紅牌') ? 'redcard' : 'blackcard'));
		return value;
	}
}

 

小小的測試項目:

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%
	String path = request.getContextPath();
	String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
			+ path + "/";
%>
<!DOCTYPE html>
<html>
<head>
<base href="<%=basePath%>" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript" src="ext-4/bootstrap.js"></script>
<script type="text/javascript" src="ext-4/locale/ext-lang-zh_CN.js"></script>
<link type="text/css" rel="stylesheet"
	href="ext-4/resources/css/ext-all.css" />
<script type="text/javascript" src="extjs/app.js"></script>
<title>Ext JS</title>
<style type="text/css">
    .x-grid-cell.greencard {
        background-color: #B6FFA8;
    }
</style>
</head>
<body>
</body>
</html>

 

Column 的 renderer 函數:

{
    text: 'Email',
    dataIndex: 'email',
    flex: 1,
    renderer: function(value, metaData){
        metaData.tdCls = 'greencard';
		return value;
    }
}

 

效果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM