先從model講起
代碼如下:
1 //求職 2 Ext.define('app.model.Staff', { 3 extend: 'Ext.data.Model', 4 config: { 5 fields: [{ 6 name: 'id', 7 type: 'int' 8 }, 9 { 10 //用戶id 11 name: 'uid', 12 type: 'int' 13 }, 14 { 15 //姓名 16 name: 'fullname', 17 type: 'string', 18 convert: function (v, record) { 19 var display = record.data.display_name; 20 if (display == 1) { 21 return v; 22 } else if (display == 2) { 23 return 'N' + record.data.id; 24 } 25 return v.substring(0, 1) + '**'; 26 } 27 }, 28 { 29 //年齡 30 name: 'birthdate', 31 type: 'int', 32 convert: function (v, record) { 33 var time = new Date().getFullYear(); 34 return time - v; 35 } 36 }, 37 { 38 //姓隱藏程度 39 name: 'display_name', 40 type: 'string' 41 }, 42 { 43 //全職兼職 44 name: 'nature_cn', 45 type: 'string' 46 }, 47 { 48 //標簽 49 name: 'tag', 50 type: 'string', 51 convert: function (v, record) { 52 if (!v) { 53 return ''; 54 } 55 var taglist = v.split('|'); 56 var tag = []; 57 for (var i in taglist) { 58 var j = { 59 title: taglist[i].split(',')[1] 60 }; 61 tag.push(j); 62 } 63 return tag; 64 } 65 }, 66 { 67 //學歷 68 name: 'education_cn', 69 type: 'string' 70 }, 71 { 72 //工作經驗 73 name: 'experience_cn', 74 type: 'string', 75 convert: function (v, record) { 76 return v != "無經驗" ? v + '經驗' : v; 77 } 78 }, 79 { 80 //性別 81 name: 'sex_cn', 82 type: 'string' 83 }, 84 { 85 //地址 86 name: 'householdaddress', 87 type: 'string' 88 }, 89 { 90 //刷新時間 91 name: 'refreshtime', 92 type: 'string' 93 }, 94 { 95 //期望崗位 96 name: 'intention_jobs', 97 type: 'string' 98 }] 99 } 100 });
值得注意的是convert方法,有兩個參數其中v是當前字段的值,record則是整個model的值
可以根據需求來二次加工數據,比如說后台返回的值是0,1而你希望他顯示的值是男,女這種情況
下面再說說store
代碼如下:
1 Ext.define('app.store.StaffList', { 2 extend: 'Ext.data.Store', 3 config: { 4 model: 'app.model.Staff',//對應的數據模型,只有模型中已經定義的字段才能存儲到store中,沒有定義的字段是不是存儲的 5 storeId: 'staffList', //給他一個id,以便於list中指定store。以及通過Ext.getStore(id)來得到store 6 autoLoad: false,//在index頁面啟動時不自動加載數據 7 pageSize: 7, //想后台傳遞一個參數pageSize值為7,這里的意思是告訴后台每頁顯示7條數據,用於分頁。 8 //還有一個參數limit,用來告訴后台當前顯示第幾頁。 9 proxy: { 10 type: 'jsonp',//向后台讀取數據的方式,可以是jsonp或者ajax 11 url: MyUtil.postUrl + StaffList.ashx',//請求數據的地址 12 reader: { 13 type: "json",//返回數據的格式 14 rootProperty: 'result',//返回數據的根節點 15 totalProperty: 'totalCounts'//數據總數,后台不給也沒事。不過這樣就沒辦法確定是不是最后一頁了 16 } 17 } 18 } 19 });
需要注意的是,pageSize的作用並不是指在list中每次顯示多少條數據,而是告訴后台你每次要顯示多少條數據,你要7條后台給你10條也是可以的,給你10條list就會顯示10條數據上去
就像小學生問媽媽要零用錢,小學生問媽媽要5塊,媽媽心情好了給10塊也是可以的,心情不好一塊也不給。不管給多少,小學生都得乖乖的把錢放到兜兜里面。
對於list可以做一個小小的擴展
1 /* 2 *自定義列表頁面 3 */ 4 Ext.define('app.view.util.MyList', { 5 alternateClassName: 'myList', 6 extend: 'Ext.List', 7 xtype: 'myList', 8 requires: ['Ext.plugin.ListPaging', 'Ext.plugin.PullRefresh'], 9 config: { 10 cls: 'list',//自定義css 11 plugins: [{ 12 xclass: 'Ext.plugin.ListPaging',//分頁插件 13 autoPaging: true,//滾動到最底部時是否自動加載下一頁數據 14 noMoreRecordsText: '沒有更多內容了', 15 loadMoreText: '加載更多...'//加載更多按鈕顯示內容 16 }, 17 { 18 xclass: 'Ext.plugin.PullRefresh',//下拉刷新插件 19 lastUpdatedText: '上次刷新時間:', 20 loadingText: '加載中...', 21 pullRefreshText: '下拉可以手動刷新', 22 releaseRefreshText: '松開可以刷新', 23 refreshFn: function (loaded, arguments) {//開始刷新觸發的時間,默認效果是只刷新第一頁數據。不管后面顯示了多少數據 24 loaded.getList().getStore().loadPage(1);//這里進行了處理,觸發時清空所有數據,重新加載第一頁數據。 25 } 26 }], 27 loadingText: false, //禁用加載遮罩,防止跳轉時頁面卡頓,使用統一的遮罩效果 28 emptyText: '沒有更多內容了' 29 } 30 });
一個list這樣就可以了
1 Ext.define('app.view.job.StaffList', { 2 alternateClassName: 'staffList', 3 extend: 'app.view.util.MyList', 4 requires: ['app.view.job.StaffInfo'], 5 xtype: 'staffList', 6 config: { 7 itemHeight:68, 8 store: 'staffList', 9 itemTpl: new Ext.XTemplate( 10 '<div class="left">', 11 '<div class="row">{fullname}</div><div class="row sm grayF">{education_cn} - {experience_cn} - {nature_cn}</div><div class="row sm grayF">{sex_cn} - {householdaddress}</div>', 12 '</div>', 13 '<div class="right"><div class="row grayF">{refreshtime}</div><div class="row sm orangeF">{intention_jobs}</div></div>') 14 } 15 });
大概就是這樣吧,附圖一張

