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

extjs 學習筆記(三) 最基本的grid

jquery在這方面則正好相反,它的UI都以插件形式提供,可以需要什么就引用什么,所以非常小巧靈活,但由于插件往往是由不同的人或者團隊來提供,界面和接口往往就不那么一致。反正是各有千秋吧。
今天學習extjs中的grid,它可以說是功能強大,無出其右,只有你想不到的,沒有它做不到的,呵呵,好像是有點夸張了。好,不說廢話了,我們就從最簡單的grid開始,一步步來看看extjs給我們提供的grid究竟給我們提供了哪些功能。
一個grid包括一些行和列,在extjs里邊,列由Ext.grid.ColumnModel來管理,我們來看看如何創(chuàng)建一個ColumnModel對象:
復制代碼 代碼如下:
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'}
]);

這里定義了五個列,列可以通過參數進行配置:id用來標識列,在css中使用該id可以對整列所有的單元格設置樣式,可自動擴充的列也根據這個id來標識;header是列名字;width是列的寬度;sortable用來指明列是否可排序,dataIndex,先不管它。比較常用的參數還有:editable,指示列是否可編輯;renderer,指示列如何來呈現,后邊會再詳細介紹它。
有了列,我們還需要一些數據來填充行,構造一個數組吧:
復制代碼 代碼如下:
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']
];

現在萬事俱備只欠東風了,列定義好了,數據也有了,接下來就是把它們組裝成一個grid??匆幌峦暾拇a:
復制代碼 代碼如下:
///<reference path="vswd-ext_2.0.2.js" />
/**//*
*作者:大笨
*日期:2009-10-13
*版本:1.0
*/
Ext.onReady(function() {
//構造列
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' }
]);
//構造數據
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']
];
//構造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表示一個grid,它需要一個json對象作為參數來進行配置,我們看看用到的配置:
renderTo:指出grid構造出來之后要在哪里呈現,可以是一個元素的id,一個Dom結點或者一個Element對象,如果沒有這個參數,就必須調用Ext.grid.GridPanel的render方法來呈現出grid。
stroe:可以簡寫為ds,以一個統(tǒng)一的接口提供數據給grid,,我們知道數據可能有很多種格式,除了我們用到的數組,還可以是json,xml等等,如果讓grid負責來識別每一種數據格式顯然不是一個好的設計思想,所以在extjs中有一個專門的類Ext.data.Store來負責數據的格式轉換,這里我們用到它的子類ArrayStore,顧名思義,是專門針對數組來進行轉換的。我們會專門有一個系列來討論Ext.data命名空間下邊的一些類,那時會對Store類進行深入的了解?,F在我們只看看我們用到的fields字段,它是Ext.data.Field類的集合,該類有一個name屬性,我們前邊在ColumnModel里邊置之不理的dataIndex就是引用了這個屬性的值來對應列和Field之間的關系,type用來指出類型,默認是字符串類型,dateFormat則指出日期的格式。
cm:colModel的簡寫,這里放上我們前邊構造好的ColumnModel對象就可以了。
stripeRows:是否顯示條紋。
autoExpandColumn:自動擴充的列,該列會自動填充grid的空白空間。
height和width:grid的高度和寬度。
title:grid的標題。
現在我們運行一下看看效果,應該說這個grid還算漂亮,在列的名字上點擊還能夠進行排序,列的寬度可以自由拖動,位置也可以改變。按下ctrl鍵,我們可以選擇多個行。當我們把鼠標移動到列名上,還可以看到出現一個倒立的小三角,點擊出現個菜單,可以看到里邊能對列進行排序,還可以隱藏列。不過我們也看到,日期的顯示并不盡如人意,百分比依然是浮點數,而且我們通常用赤字表示虧損或者現在更為流行的說法負增長,如果在我們的grid里邊,負增長也可以用赤字表現出來,效果應該會更好一些。extjs給我們提供了一個很方便的東西來實現我們的想法:renderer。在ColumnModel里邊,我們可以給需要的列里邊增加renderer來實現我們想要的效果。下邊是改動后的ColumnModel:
復制代碼 代碼如下:
//構造列
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函數
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函數
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可以理解為一個“解釋器”方法,它用來在顯示數據之前轉化數據??梢杂腥N方式來實現renderer:
使用一個返回HTML標記的renderer函數
Ext.util.Format類的一個屬性,該屬性提供一個renderer函數
一個包括renderer函數和作用域的對象
我們的例子用到了前兩種方式。renderer函數傳遞6個參數,保存了單元格的所有信息,這里只用到了第一個參數,它保存了單元格的值,其它參數的意義我們可以參考幫助文檔。
現在運行程序,可以看到我們希望的效果了:負增長用了赤字來表示,作為對比,正的增長用了綠顏色,時間也按照我們希望的格式顯示了出來。
有的時候,我們還希望給每一行編號,這個實現起來也很容易,我們只要在ColumnModel的構造函數里邊加上new Ext.grid.RowNumberer()就可以了:
復制代碼 代碼如下:
var cm = new Ext.grid.ColumnModel([
new Ext.grid.RowNumberer(), //實現自動編號
{ 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的配置里邊還有兩個常用的參數:
viewConfig:我們可以用這個參數來對grid的界面進行一些設置,詳細內容可以查看幫助文檔。
selModel:可以簡寫為sm,選擇模型,比如是選擇單元格還是選擇整個行,默認是選擇行。

JavaScript技術extjs 學習筆記(三) 最基本的grid,轉載需保留來源!

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

主站蜘蛛池模板: 91精品国产麻豆91久久久久久 | 日本视频一区二区 | www.五月| 亚洲高清视频一区 | 亚洲国产一 | 97福利影院 | 亚州一级毛片 | 国产免费久久精品丫丫 | 伊人精品国产 | 久久久久激情免费观看 | 四色婷婷| 激情欧美一区二区三区中文字幕 | 欧美黑人巨大日本人又爽又色 | 成人深爱网 | 婷婷久久综合九色综合绿巨人 | 久青草国产视频 | 国产91原创 | 国产精品极品美女自在线 | 伊人网成人 | 天天欧美 | 国产视频中文字幕 | 激情五月深爱五月 | 国产精品日本不卡一区二区 | 欧美xxxx网站 | 久久婷婷国产精品香蕉 | 亚洲综合影视 | 久久青青草原精品国产软件 | 日本大片免a费观看视频+播放器 | 久久一级视频 | 亚洲欧美激情视频 | 激情欧美一区二区三区中文字幕 | 六月婷婷在线 | 欧美激情 在线 | 激情六月婷婷 | 国产成人香蕉在线视频网站 | 国产亚洲精品福利在线 | 欧美激情亚洲一区中文字幕 | 国产精品美女免费视频观看 | 午夜一级做a爰片久久毛片 午夜影院日韩 | japanese无码中文字幕 | 六月婷婷在线观看 |