ExtJS4學習筆記(七)---帶搜尋的Grid(SearchGrid)
阿新 • • 發佈:2019-01-27
專案開發中,Grid元件少不了搜尋功能,在Extjs4中,搜尋元件以外掛的形式出現,而且實現也非常簡單,搜尋元件位於examples/ux/form目錄下,JS檔案是SearchField.js。
Grid載入搜尋功能,要注意的是:
1、開啟延遲載入,即Ext.Loader.setConfig({enabled: true});
2、設定外掛的目錄:Ext.Loader.setPath('Ext.ux', '../../examples/ux'); ,需要注意,外掛所在目錄一定要正確,否則載入失敗,就實現不了所要功能了。
效果圖:
初始載入
輸入查詢條件後
HTML程式碼:
- <!DOCTYPE html PUBLIC
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>SearchGrid-MHZG.NET</title>
- <link rel="stylesheet" type="text/css"
- <style type="text/css">
- #search-results a {
- color: #385F95;
- font:bold 11px tahoma, arial, helvetica, sans-serif;
- text-decoration:none;
- }
- #search-results a:hover {
- text-decoration:underline;
- }
- #search-results p {
- margin:3px !important;
- }
- .search-item {
- font:normal 11px tahoma, arial, helvetica, sans-serif;
- padding:3px 10px 3px 10px;
- border:1px solid #fff;
- border-bottom:1px solid #eeeeee;
- white-space:normal;
- color:#555;
- }
- .search-item h3 {
- display:block;
- font:inherit;
- font-weight:bold;
- color:#222;
- }
- .search-item h3 span {
- float: right;
- font-weight:normal;
- margin:0 0 5px 5px;
- width:100px;
- display:block;
- clear:none;
- }
- /*這裡要注意這兩張圖片的路徑要正確*/
- .x-form-clear-trigger {
- background-image: url(../../resources/themes/images/default/form/clear-trigger.gif);
- }
- .x-form-search-trigger {
- background-image: url(../../resources/themes/images/default/form/search-trigger.gif);
- }
- </style>
- <script type="text/javascript" src="../../bootstrap.js"></script>
- <script type="text/javascript" src="../../locale/ext-lang-zh_CN.js"></script>
- <script type="text/javascript" src="searchgrid.js"></script>
- </head>
- <body>
- <div id="demo"></div>
- </body>
- </html>
SearchGrid.js:
- Ext.Loader.setConfig({enabled: true});
- Ext.Loader.setPath('Ext.ux', '../../examples/ux');
- Ext.require([
- 'Ext.grid.*',
- 'Ext.toolbar.Paging',
- 'Ext.util.*',
- 'Ext.data.*',
- 'Ext.ux.form.SearchField'
- ]);
- Ext.onReady(function(){
- Ext.define('MyData',{
- extend: 'Ext.data.Model',
- fields: [
- 'title','author',
- //第一個欄位需要指定mapping,其他欄位,可以省略掉。
- {name:'hits',type: 'int'},
- 'addtime'
- ]
- });
- //建立資料來源
- var store = Ext.create('Ext.data.Store', {
- //分頁大小
- pageSize: 50,
- model: 'MyData',
- //是否在服務端排序
- remoteSort: true,
- proxy: {
- //非同步獲取資料,這裡的URL可以改為任何動態頁面,只要返回JSON資料即可
- type: 'ajax',
- url: 'searchgrid.asp',
- reader: {
- root: 'items',
- totalProperty : 'total'
- },
- simpleSortMode: true
- },
- sorters: [{
- //排序欄位。
- property: 'hits',
- //排序型別,預設為 ASC
- direction: 'DESC'
- }]
- });
- //建立Grid
- var grid = Ext.create('Ext.grid.Panel',{
- store: store,
- columnLines: true,
- columns: [
- {text: "標題", width: 120, dataIndex: 'title', sortable: true},
- {text: "作者", width: 140, dataIndex: 'author', sortable: false},
- {text: "點選數", width: 100, dataIndex: 'hits', sortable: true},
- {text: "新增時間", width: 150, dataIndex: 'addtime', sortable: true}
- ],
- height:400,
- width:520,
- x:20,
- y:40,
- title: 'ExtJS4 SearchGrid-Grid 搜尋',
- disableSelection: true,
- loadMask: true,
- renderTo: 'demo',
- viewConfig: {
- id: 'gv',
- trackOver: false,
- stripeRows: false
- },
- dockedItems: [{
- dock: 'top',
- xtype: 'toolbar',
- items: {
- width: 300,
- fieldLabel: '搜尋',
- labelWidth: 50,
- xtype: 'searchfield',
- store: store
- }
- }, {
- dock: 'bottom',
- xtype: 'pagingtoolbar',
- store: store,
- pageSize: 25,
- displayInfo: true,
- displayMsg: '顯示 {0} - {1} 條,共計 {2} 條',
- emptyMsg: '沒有資料'
- }]
- })
- store.loadPage(1);
- })
程式碼完成了Grid元件非同步載入資訊、分頁和搜尋功能,可以滿足一般使用情況了。
服務端程式碼,由於使用測試資料,這裡只使用了最簡單的方法來實現搜尋效果,實際操作中,需要將查詢條件置於SQL語句中,達到搜尋效果。
SearchGrid.asp:
- <%
- Response.ContentType = "text/html"
- Response.Charset = "UTF-8"
- %>
- <%
- '返回JSON資料,自定義一些測試資料。。
- '這裡的引數與EXT3.x相同,區別在於排序欄位和排序方式使用了新的屬性。
- '由於這裡是測試資料,接收的引數只用到了start,limit。sorts和dir在實際操作過程中,將之加入SQL的ORDER BY裡即可。
- start = Request("start")
- limit = Request("limit")
- '查詢時獲取的引數。
- query = Request("query")
- If start = ""Then
- start = 0
- EndIf
- If limit = ""Then
- limit = 50
- EndIf
- sorts = Replace(Trim(Request.Form("sort")),"'","")
- dir = Replace(Trim(Request.Form("dir")),"'","")
- '測試資料,這裡直接輸出結果,實際應用中,應該把查詢條件放到SQL語句中。
- If query = "newstitle"Then
- Echo("{")
- Echo("""total"":")
- Echo("""1")
- Echo(""",""items"":[")
- Echo("{")
- Echo("""title"":""newstitle""")
- Echo(",")
- Echo("""author"":""author""")
- Echo(",")
- Echo("""hits"":""100""")
- Echo(",")
- Echo("""addtime"":"""&Now()&"""")
- Echo("}")
- Echo("]}")
- Else
- Dim counts:counts=300
- '注意,這裡的counts相當於Rs.RecordCount,也就是記錄總數。
- Dim Ls:Ls = Cint(start) + Cint(limit)
- If Ls >= counts Then
- Ls = counts
- EndIf
- Echo("{")
- Echo("""total"":")
- Echo(""""&counts&""",")
- Echo("""items"":[")
- For i = start+1 To Ls
- Echo("{")
- Echo("""title"":""newstitle"&i&"""")
- Echo(",")
- Echo("""author"":""author"&i&"""")
- Echo(",")
- Echo("""hits"":"""&i&"""")
- Echo(",")
- Echo("""addtime"":"""&Now()&"""")
- Echo("}")
- If i<Ls Then
- Echo(",")
- EndIf
- Next
- Echo("]}")
- EndIf
- Function Echo(str)
- Response.Write(str)
- EndFunction
- %>
至此,帶搜尋功能的Grid就全部完成了。