<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 55  文章 - 187  trackbacks - 0
    <2008年3月>
    2425262728291
    2345678
    9101112131415
    16171819202122
    23242526272829
    303112345

    常用鏈接

    留言簿(12)

    隨筆分類

    隨筆檔案

    groovy

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    在使用Ext與DWR框架時,我們往往會用到GridPanel組件搭配PagingToolbar組件來實現翻頁數據列表。翻頁的時候每一頁都要從后臺獲取該頁的數據列表信息。
    在解決此問題時,花了不少時間,看過不少前人的代碼,終于成功了!共享之。
    關鍵代碼如下:

    Store為:
     1var ds = new Ext.data.Store({
     2
     3    proxy: new Ext.data.DWRProxy({
     4        callback: Folder.getMessageList,
     5        params: {
     6            start: '0',
     7            limit: PAGE_SIZE
     8        }

     9    }
    ),
    10    
    11    //    proxy: new Ext.data.MemoryProxy(messageList),
    12    
    13    reader: new Ext.data.ObjectReader({
    14        root: 'messages',
    15        totalProperty: 'total'//用來讓Ext的PagingToolbar組件分析總頁數
    16    }
    , [{
    17        name: 'messageId'
    18    }
    {
    19        name: 'from'
    20    }
    {
    21        name: 'subject'
    22    }
    {
    23        name: 'sendTime'
    24    }
    {
    25        name: 'contentText'
    26    }
    ])
    27
    28}
    );
    29
    30//在進行DWR請求之前,默認在請求參數中添加當前文件夾ID。這樣DWR請求中包括的請求參數為:folderId,start,limit
    31ds.on('beforeload', function(){
    32    Ext.apply(this.baseParams, {
    33        folderId: currentFolderId
    34    }
    );
    35}
    );
    36
    37ds.load({
    38        params: {
    39            start: currentStart,
    40            limit: currentLimit
    41        }

    42    }
    );//指定起始位置以及個數


    自定義的DWRProxy和ObjectReader:
      1Ext.data.DWRProxy = function(config){
      2    Ext.data.DWRProxy.superclass.constructor.call(this);
      3    Ext.apply(this, config ||
      4    {});
      5}
    ;
      6
      7Ext.extend(Ext.data.DWRProxy, Ext.data.DataProxy, {
      8    //DWR請求
      9    load: function(params, reader, callback, scope, arg){
     10        currentStart = params.start;//保存當前頁記錄起始位置
     11        currentLimit = params.limit;//保存當前頁記錄的個數
     12        document.dwr = {
     13            params: params,
     14            reader: reader,
     15            callback: callback,
     16            scope: scope,
     17            arg: arg
     18        }
    ;
     19        //處理請求參數,將各個請求參數轉換到Array中
     20        var callParams = new Array();
     21        callParams.push(params.folderId);//當前文件夾ID
     22        callParams.push(params.start);//請求的起始位置
     23        callParams.push(params.limit);//請求的個數
     24        if (this.params !== undefined && this.params !== null{
     25            this.callback.call(this, callParams, this.loadResponse);//DWR請求
     26        }

     27        else {
     28            this.callback.call(thisthis.loadResponse);
     29        }

     30    }
    ,
     31    //處理DWR返回
     32    loadResponse: function(response){
     33        var dwr = document.dwr;
     34        try {
     35            //IE throws an exception 'Error: TypeError, Object does not support this operation'   
     36            //so use trycatch to suppress this exception   
     37            delete document.dwr;//ie不支持delete
     38        }
     
     39        catch (e) {
     40        }

     41        var result;
     42        try {
     43            result = dwr.reader.read(response);//讀取請求返回的json
     44        }
     
     45        catch (e) {
     46            //this.fireEvent("loadexception",this,dwr,response,e);   
     47            dwr.callback.call(dwr.scope, null, dwr.arg, false);
     48            return;
     49        }

     50        dwr.callback.call(dwr.scope, result, dwr.arg, true);
     51    }
    ,
     52    failure: function(errorString, exception){
     53        console.log("DWR " + exception);
     54    }
    ,
     55    update: function(params, records){
     56    }

     57}
    );
     58
     59//自定義一個用于處理返回消息列表的Reader
     60Ext.data.ObjectReader = function(meta, recordType){
     61    Ext.data.ObjectReader.superclass.constructor.call(this, meta, recordType);
     62}
    ;
     63
     64Ext.extend(Ext.data.ObjectReader, Ext.data.DataReader, {
     65    //處理DWR返回
     66    read: function(response){
     67        var responseDecode = Ext.util.JSON.decode(response);//注意,由java的json-lib生成的json串需要解碼一下
     68        var data = responseDecode.messages;
     69        var sid = this.meta ? this.meta.id : null;
     70        var recordType = this.recordType, fields = recordType.prototype.fields;
     71        var records = [];
     72        var root = data;
     73        for (var i = 0; i < root.length; i++{
     74            var obj = root[i];
     75            var values = {};
     76            var id = obj[sid];
     77            for (var j = 0, jlen = fields.length; j < jlen; j++{
     78                var f = fields.items[j];
     79                var k = (f.mapping !== undefined && f.mapping !== null? f.mapping : f.name;
     80                var v = null;
     81                var idx = k.indexOf(".");
     82                if (idx == -1{
     83                    v = obj[k] !== undefined ? obj[k] : f.defaultValue;
     84                }

     85                else {
     86                    var k1 = k.substr(0, idx);
     87                    var k2 = k.substr(idx + 1);
     88                    if (obj[k1] == undefined) {
     89                        v = f.defaultValue;
     90                    }

     91                    else {
     92                        var obj2 = obj[k1];
     93                        v = obj2[k2] !== undefined ? obj2[k2] : f.defaultValue;
     94                    }

     95                }

     96                v = f.convert(v);
     97                values[f.name] = v;
     98            }

     99            var record = new recordType(values, id);
    100            records[records.length] = record;
    101        }

    102        return {
    103            records: records,//返回的消息列表記錄
    104            totalRecords: responseDecode.total//總個數
    105        }
    ;
    106    }

    107}
    );


    --------------------

        WE準高手
    posted on 2008-03-20 13:51 大衛 閱讀(6943) 評論(1)  編輯  收藏 所屬分類: Java 、JavaScript

    FeedBack:
    # re: Ext結合DWR的關鍵代碼(運行成功的DWRProxy) 2008-08-05 09:28 absolute
    自己轉載了,樓主見諒!  回復  更多評論
      
    主站蜘蛛池模板: 在线免费观看你懂的| 国产大片91精品免费观看男同| 亚洲国产日韩在线成人蜜芽| 大学生高清一级毛片免费| 男人扒开添女人下部免费视频| 亚洲福利视频一区| 妞干网免费视频观看| baoyu122.永久免费视频| 国产成人亚洲综合一区| 中文国产成人精品久久亚洲精品AⅤ无码精品| 久久免费观看国产精品88av| 亚洲精品国产精品| 亚洲AV人无码激艳猛片| 日本大片在线看黄a∨免费| 可以免费观看的国产视频| 亚洲aⅴ天堂av天堂无码麻豆 | 国产av无码专区亚洲av果冻传媒| 97久久免费视频| 午夜在线免费视频| 亚洲综合伊人制服丝袜美腿| 亚洲色WWW成人永久网址| 成人免费视频软件网站| 久热免费在线视频| 九九久久精品国产免费看小说 | 最近2018中文字幕免费视频| 香蕉视频免费在线播放| 亚洲午夜电影在线观看| 国产综合精品久久亚洲| 午夜寂寞在线一级观看免费| 日韩精品无码免费一区二区三区| 免费国产va视频永久在线观看| 亚洲一区二区三区乱码在线欧洲| 亚洲不卡av不卡一区二区| 四虎影视永久免费观看网址| 99国产精品永久免费视频| 无码日韩精品一区二区三区免费 | 亚洲第一区香蕉_国产a| 国产亚洲精品激情都市| 国产又大又黑又粗免费视频| 皇色在线视频免费网站| 8x网站免费入口在线观看|