一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

extjs 學(xué)習(xí)筆記(三) 最基本的grid

jquery在這方面則正好相反,它的UI都以插件形式提供,可以需要什么就引用什么,所以非常小巧靈活,但由于插件往往是由不同的人或者團(tuán)隊(duì)來提供,界面和接口往往就不那么一致。反正是各有千秋吧。
今天學(xué)習(xí)extjs中的grid,它可以說是功能強(qiáng)大,無出其右,只有你想不到的,沒有它做不到的,呵呵,好像是有點(diǎn)夸張了。好,不說廢話了,我們就從最簡單的grid開始,一步步來看看extjs給我們提供的grid究竟給我們提供了哪些功能。
一個(gè)grid包括一些行和列,在extjs里邊,列由Ext.grid.ColumnModel來管理,我們來看看如何創(chuàng)建一個(gè)ColumnModel對象:
復(fù)制代碼 代碼如下:
var cm = new Ext.grid.ColumnModel([
{id:'company',header: "Company", width: 160, sortable: true, dataIndex: 'company'},
{header: "Price", width: 75, sortable: true, dataIndex: 'price'},
{header: "Change", width: 75, sortable: true, dataIndex: 'change'},
{header: "% Change", width: 75, sortable: true, dataIndex: 'pctChange'},
{header: "Last Updated", width: 85, sortable: true, dataIndex: 'lastChange'}
]);

這里定義了五個(gè)列,列可以通過參數(shù)進(jìn)行配置:id用來標(biāo)識列,在css中使用該id可以對整列所有的單元格設(shè)置樣式,可自動(dòng)擴(kuò)充的列也根據(jù)這個(gè)id來標(biāo)識;header是列名字;width是列的寬度;sortable用來指明列是否可排序,dataIndex,先不管它。比較常用的參數(shù)還有:editable,指示列是否可編輯;renderer,指示列如何來呈現(xiàn),后邊會再詳細(xì)介紹它。
有了列,我們還需要一些數(shù)據(jù)來填充行,構(gòu)造一個(gè)數(shù)組吧:
復(fù)制代碼 代碼如下:
var myData = [
['3m Co',71.72,0.02,0.03,'9/1 12:00am'],
['Alcoa Inc',29.01,0.42,1.47,'9/1 12:00am'],
['Altria Group Inc',83.81,0.28,0.34,'9/1 12:00am'],
['American Express Company',52.55,0.01,0.02,'9/1 12:00am'],
['American International Group, Inc.',64.13,0.31,0.49,'9/1 12:00am'],
['AT&T Inc.',31.61,-0.48,-1.54,'9/1 12:00am'],
['Boeing Co.',75.43,0.53,0.71,'9/1 12:00am'],
['Caterpillar Inc.',67.27,0.92,1.39,'9/1 12:00am'],
['Citigroup, Inc.',49.37,0.02,0.04,'9/1 12:00am'],
['E.I. du Pont de Nemours and Company',40.48,0.51,1.28,'9/1 12:00am'],
['Exxon Mobil Corp',68.1,-0.43,-0.64,'9/1 12:00am'],
['General Electric Company',34.14,-0.08,-0.23,'9/1 12:00am'],
['General Motors Corporation',30.27,1.09,3.74,'9/1 12:00am'],
['Hewlett-Packard Co.',36.53,-0.03,-0.08,'9/1 12:00am'],
['Honeywell Intl Inc',38.77,0.05,0.13,'9/1 12:00am'],
['Intel Corporation',19.88,0.31,1.58,'9/1 12:00am'],
['International Business Machines',81.41,0.44,0.54,'9/1 12:00am'],
['Johnson & Johnson',64.72,0.06,0.09,'9/1 12:00am'],
['JP Morgan & Chase & Co',45.73,0.07,0.15,'9/1 12:00am'],
['McDonald/'s Corporation',36.76,0.86,2.40,'9/1 12:00am'],
['Merck & Co., Inc.',40.96,0.41,1.01,'9/1 12:00am'],
['Microsoft Corporation',25.84,0.14,0.54,'9/1 12:00am'],
['Pfizer Inc',27.96,0.4,1.45,'9/1 12:00am'],
['The Coca-Cola Company',45.07,0.26,0.58,'9/1 12:00am'],
['The Home Depot, Inc.',34.64,0.35,1.02,'9/1 12:00am'],
['The Procter & Gamble Company',61.91,0.01,0.02,'9/1 12:00am'],
['United Technologies Corporation',63.26,0.55,0.88,'9/1 12:00am'],
['Verizon Communications',35.57,0.39,1.11,'9/1 12:00am'],
['Wal-Mart Stores, Inc.',45.45,0.73,1.63,'9/1 12:00am']
];

現(xiàn)在萬事俱備只欠東風(fēng)了,列定義好了,數(shù)據(jù)也有了,接下來就是把它們組裝成一個(gè)grid??匆幌峦暾拇a:
復(fù)制代碼 代碼如下:
///<reference path="vswd-ext_2.0.2.js" />
/**//*
*作者:大笨
*日期:2009-10-13
*版本:1.0
*/
Ext.onReady(function() {
//構(gòu)造列
var cm = new Ext.grid.ColumnModel([
{ id: 'company', header: "Company", width: 160, sortable: true, dataIndex: 'company' },
{ header: "Price", width: 75, sortable: true, dataIndex: 'price' },
{ header: "Change", width: 75, sortable: true, dataIndex: 'change' },
{ header: "% Change", width: 75, sortable: true, dataIndex: 'pctChange' },
{ header: "Last Updated", width: 85, sortable: true, dataIndex: 'lastChange' }
]);
//構(gòu)造數(shù)據(jù)
var myData = [
['3m Co', 71.72, 0.02, 0.03, '9/1 12:00am'],
['Alcoa Inc', 29.01, 0.42, 1.47, '9/1 12:00am'],
['Altria Group Inc', 83.81, 0.28, 0.34, '9/1 12:00am'],
['American Express Company', 52.55, 0.01, 0.02, '9/1 12:00am'],
['American International Group, Inc.', 64.13, 0.31, 0.49, '9/1 12:00am'],
['AT&T Inc.', 31.61, -0.48, -1.54, '9/1 12:00am'],
['Boeing Co.', 75.43, 0.53, 0.71, '9/1 12:00am'],
['Caterpillar Inc.', 67.27, 0.92, 1.39, '9/1 12:00am'],
['Citigroup, Inc.', 49.37, 0.02, 0.04, '9/1 12:00am'],
['E.I. du Pont de Nemours and Company', 40.48, 0.51, 1.28, '9/1 12:00am'],
['Exxon Mobil Corp', 68.1, -0.43, -0.64, '9/1 12:00am'],
['General Electric Company', 34.14, -0.08, -0.23, '9/1 12:00am'],
['General Motors Corporation', 30.27, 1.09, 3.74, '9/1 12:00am'],
['Hewlett-Packard Co.', 36.53, -0.03, -0.08, '9/1 12:00am'],
['Honeywell Intl Inc', 38.77, 0.05, 0.13, '9/1 12:00am'],
['Intel Corporation', 19.88, 0.31, 1.58, '9/1 12:00am'],
['International Business Machines', 81.41, 0.44, 0.54, '9/1 12:00am'],
['Johnson & Johnson', 64.72, 0.06, 0.09, '9/1 12:00am'],
['JP Morgan & Chase & Co', 45.73, 0.07, 0.15, '9/1 12:00am'],
['McDonald/'s Corporation', 36.76, 0.86, 2.40, '9/1 12:00am'],
['Merck & Co., Inc.', 40.96, 0.41, 1.01, '9/1 12:00am'],
['Microsoft Corporation', 25.84, 0.14, 0.54, '9/1 12:00am'],
['Pfizer Inc', 27.96, 0.4, 1.45, '9/1 12:00am'],
['The Coca-Cola Company', 45.07, 0.26, 0.58, '9/1 12:00am'],
['The Home Depot, Inc.', 34.64, 0.35, 1.02, '9/1 12:00am'],
['The Procter & Gamble Company', 61.91, 0.01, 0.02, '9/1 12:00am'],
['United Technologies Corporation', 63.26, 0.55, 0.88, '9/1 12:00am'],
['Verizon Communications', 35.57, 0.39, 1.11, '9/1 12:00am'],
['Wal-Mart Stores, Inc.', 45.45, 0.73, 1.63, '9/1 12:00am']
];
//構(gòu)造grid
var grid = new Ext.grid.GridPanel({
renderTo: "grid",
store: new Ext.data.ArrayStore({
fields: [
{ name: 'company' },
{ name: 'price', type: 'float' },
{ name: 'change', type: 'float' },
{ name: 'pctChange', type: 'float' },
{ name: 'lastChange', type: 'date', dateFormat: 'n/j h:ia' }
],
data:myData
}),
cm: cm,
stripeRows: true,
autoExpandColumn: 'company',
height: 350,
width: 600,
title: 'Array Grid'
});
})

在extjs中,Ext.grid.GridPanel表示一個(gè)grid,它需要一個(gè)json對象作為參數(shù)來進(jìn)行配置,我們看看用到的配置:
renderTo:指出grid構(gòu)造出來之后要在哪里呈現(xiàn),可以是一個(gè)元素的id,一個(gè)Dom結(jié)點(diǎn)或者一個(gè)Element對象,如果沒有這個(gè)參數(shù),就必須調(diào)用Ext.grid.GridPanel的render方法來呈現(xiàn)出grid。
stroe:可以簡寫為ds,以一個(gè)統(tǒng)一的接口提供數(shù)據(jù)給grid,,我們知道數(shù)據(jù)可能有很多種格式,除了我們用到的數(shù)組,還可以是json,xml等等,如果讓grid負(fù)責(zé)來識別每一種數(shù)據(jù)格式顯然不是一個(gè)好的設(shè)計(jì)思想,所以在extjs中有一個(gè)專門的類Ext.data.Store來負(fù)責(zé)數(shù)據(jù)的格式轉(zhuǎn)換,這里我們用到它的子類ArrayStore,顧名思義,是專門針對數(shù)組來進(jìn)行轉(zhuǎn)換的。我們會專門有一個(gè)系列來討論Ext.data命名空間下邊的一些類,那時(shí)會對Store類進(jìn)行深入的了解?,F(xiàn)在我們只看看我們用到的fields字段,它是Ext.data.Field類的集合,該類有一個(gè)name屬性,我們前邊在ColumnModel里邊置之不理的dataIndex就是引用了這個(gè)屬性的值來對應(yīng)列和Field之間的關(guān)系,type用來指出類型,默認(rèn)是字符串類型,dateFormat則指出日期的格式。
cm:colModel的簡寫,這里放上我們前邊構(gòu)造好的ColumnModel對象就可以了。
stripeRows:是否顯示條紋。
autoExpandColumn:自動(dòng)擴(kuò)充的列,該列會自動(dòng)填充grid的空白空間。
height和width:grid的高度和寬度。
title:grid的標(biāo)題。
現(xiàn)在我們運(yùn)行一下看看效果,應(yīng)該說這個(gè)grid還算漂亮,在列的名字上點(diǎn)擊還能夠進(jìn)行排序,列的寬度可以自由拖動(dòng),位置也可以改變。按下ctrl鍵,我們可以選擇多個(gè)行。當(dāng)我們把鼠標(biāo)移動(dòng)到列名上,還可以看到出現(xiàn)一個(gè)倒立的小三角,點(diǎn)擊出現(xiàn)個(gè)菜單,可以看到里邊能對列進(jìn)行排序,還可以隱藏列。不過我們也看到,日期的顯示并不盡如人意,百分比依然是浮點(diǎn)數(shù),而且我們通常用赤字表示虧損或者現(xiàn)在更為流行的說法負(fù)增長,如果在我們的grid里邊,負(fù)增長也可以用赤字表現(xiàn)出來,效果應(yīng)該會更好一些。extjs給我們提供了一個(gè)很方便的東西來實(shí)現(xiàn)我們的想法:renderer。在ColumnModel里邊,我們可以給需要的列里邊增加renderer來實(shí)現(xiàn)我們想要的效果。下邊是改動(dòng)后的ColumnModel:
復(fù)制代碼 代碼如下:
//構(gòu)造列
var cm = new Ext.grid.ColumnModel([
{ id: 'company', header: "Company", width: 160, sortable: true, dataIndex: 'company' },
{ header: "Price", width: 75, sortable: true, dataIndex: 'price' },
{ header: "Change", width: 75, sortable: true, dataIndex: 'change', renderer: change },
{ header: "% Change", width: 75, sortable: true, dataIndex: 'pctChange', renderer: pctChange },
{ header: "Last Updated", width: 120, sortable: true, dataIndex: 'lastChange',renderer:Ext.util.Format.dateRenderer("Y-m-d h:i") }
]);
// Change列的renderer函數(shù)
function change(val) {
if (val > 0) {
return '<span style="color:green;">' + val + '</span>';
} else if (val < 0) {
return '<span style="color:red;">' + val + '</span>';
}
return val;
}
// % Change列的renderer函數(shù)
function pctChange(val) {
if (val > 0) {
return '<span style="color:green;">' + val + '%</span>';
} else if (val < 0) {
return '<span style="color:red;">' + val + '%</span>';
}
return val;
}

renderer可以理解為一個(gè)“解釋器”方法,它用來在顯示數(shù)據(jù)之前轉(zhuǎn)化數(shù)據(jù)??梢杂腥N方式來實(shí)現(xiàn)renderer:
使用一個(gè)返回HTML標(biāo)記的renderer函數(shù)
Ext.util.Format類的一個(gè)屬性,該屬性提供一個(gè)renderer函數(shù)
一個(gè)包括renderer函數(shù)和作用域的對象
我們的例子用到了前兩種方式。renderer函數(shù)傳遞6個(gè)參數(shù),保存了單元格的所有信息,這里只用到了第一個(gè)參數(shù),它保存了單元格的值,其它參數(shù)的意義我們可以參考幫助文檔。
現(xiàn)在運(yùn)行程序,可以看到我們希望的效果了:負(fù)增長用了赤字來表示,作為對比,正的增長用了綠顏色,時(shí)間也按照我們希望的格式顯示了出來。
有的時(shí)候,我們還希望給每一行編號,這個(gè)實(shí)現(xiàn)起來也很容易,我們只要在ColumnModel的構(gòu)造函數(shù)里邊加上new Ext.grid.RowNumberer()就可以了:
復(fù)制代碼 代碼如下:
var cm = new Ext.grid.ColumnModel([
new Ext.grid.RowNumberer(), //實(shí)現(xiàn)自動(dòng)編號
{ id: 'company', header: "Company", width: 160, sortable: true, dataIndex: 'company' },
{ header: "Price", width: 75, sortable: true, dataIndex: 'price' },
{ header: "Change", width: 75, sortable: true, dataIndex: 'change', renderer: change },
{ header: "% Change", width: 75, sortable: true, dataIndex: 'pctChange', renderer: pctChange },
{ header: "Last Updated", width: 120, sortable: true, dataIndex: 'lastChange',renderer:Ext.util.Format.dateRenderer("Y-m-d h:i") }
]);

Ext.grid.GridPanel的配置里邊還有兩個(gè)常用的參數(shù):
viewConfig:我們可以用這個(gè)參數(shù)來對grid的界面進(jìn)行一些設(shè)置,詳細(xì)內(nèi)容可以查看幫助文檔。
selModel:可以簡寫為sm,選擇模型,比如是選擇單元格還是選擇整個(gè)行,默認(rèn)是選擇行。

JavaScript技術(shù)extjs 學(xué)習(xí)筆記(三) 最基本的grid,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 久久久久久99精品 | 国产在线精品美女观看 | 成人在线观看一区 | 日本精品一区二区三区在线视频一 | 亚洲一区二区三区视频 | 日本www在线观看 | 成人福利在线 | 91精品视频在线播放 | 色综合久久综合欧美综合图片 | www.av在线视频 | 日本高清中文字幕一区二区三区 | 亚洲成a人片毛片在线 | 丁香八月婷婷 | 另类av| 国产成人综合一区精品 | 欧美精品做人一级爱免费 | 国内精品视频 | 黄色网址免费在线 | 国产精品久久亚洲一区二区 | 一区二区三区四区视频在线 | 国产色在线观看 | 青青草国产精品久久久久 | 欧美7777 | 一区免费在线观看 | 成人在色线视频在线观看免费大全 | 伊人色综合久久天天网 | 欧美精品v国产精品v日韩精品 | 9191在线精品播放 | 国产精品一区在线免费观看 | 欧美日韩色视频在线观看 | 中文字幕亚洲无线码在线一区 | 99ri精品 | a级黄色网址 | 最新亚洲一区二区三区四区 | 免费伊人网 | 亚洲精品天堂自在久久77 | 2020国产成人久久精品 | 免费韩国美女爽快一级毛片 | 国产日韩精品一区在线不卡 | 天天添天天操 | 一区二区在线观看视频 |