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

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

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

    白日不到處,青春恰自來。
    苔花如米小,亦學(xué)牡丹開。
    posts - 4,  comments - 34,  trackbacks - 0
          最近接觸yui-ext,被它漂亮的界面征服,于是想把它運用到項目里面。
    公司目前是用dwr來實現(xiàn)一些簡單的ajax功能,想把yui-ext結(jié)合dwr,但目前網(wǎng)上還很少有這樣的例子,參考了yui-ext論壇里面的文章,做了一個簡單的分頁例子(下載)
        dwrproxy.js,這里只需要修改很少的地方。   
    Ext.data.DWRProxy = function(dwrCall, pagingAndSort){
      Ext.data.DWRProxy.superclass.constructor.call(
    this);
      
    this.dwrCall = dwrCall;
      
    //this.args = args;
        this.pagingAndSort = (pagingAndSort!=undefined ? pagingAndSort : true);
    }
    ;

    Ext.extend(Ext.data.DWRProxy, Ext.data.DataProxy, 
    {
      load : function(params, reader, callback, scope, arg) 
    {
        
    if(this.fireEvent("beforeload"this, params) !== false{
          var sort;
          
    if(params.sort && params.dir) sort = params.sort + ' ' + params.dir;
          
    else sort = '';
          var delegate 
    = this.loadResponse.createDelegate(this, [reader, callback, scope, arg], 1);
          var callParams 
    = new Array();
        
            
                
    //if(this.pagingAndSort) {
              
    //callParams.push(params.start);
              
    //callParams.push(params.limit);
              
    //callParams.push(sort);
                
    //}

          
    //這里的arg.params包含了分頁時用到的基礎(chǔ)參數(shù)和用戶查詢時自定義的參數(shù)    
          callParams.push(arg.params);
          callParams.push(delegate);
          
         
    //console.debug(callParams);         
         
          
    this.dwrCall.apply(this, callParams);
        
        }
     else {
          callback.call(scope 
    || thisnull, arg, false);
        }

      }
    ,

      loadResponse : function(listRange, reader, callback, scope, arg) 
    {
        var result;
        
    //console.debug(listRange); 
        try {
          result 
    = reader.read(listRange);
        }
     catch(e) {
          
    this.fireEvent("loadexception"thisnull, response, e);
          callback.call(scope, 
    null, arg, false);
          
    return;
        }

        callback.call(scope, result, arg, 
    true);
      }
    ,

      update : function(dataSet)
    {},

      updateResponse : function(dataSet)
      
    {}
    }
    );

    Ext.data.ListRangeReader 
    = function(meta, recordType){
        Ext.data.ListRangeReader.superclass.constructor.call(
    this, meta, recordType);
        
    this.recordType = recordType;
    }
    ;
    Ext.extend(Ext.data.ListRangeReader, Ext.data.DataReader, 
    {
      getJsonAccessor: function()
    {
          var re 
    = /[\[\.]/;
          
    return function(expr) {
              
    try {
                  
    return(re.test(expr))
                      
    ? new Function("obj""return obj." + expr)
                      : function(obj)
    {
                          
    return obj[expr];
                      }
    ;
              }
     catch(e){}
              
    return Ext.emptyFn;
          }
    ;
      }
    (),
        
        read : function(o)
    {
            var recordType 
    = this.recordType, fields = recordType.prototype.fields;

            
    //Generate extraction functions for the totalProperty, the root, the id, and for each field
            if (!this.ef) {
                
    if(this.meta.totalProperty) {
                    
    this.getTotal = this.getJsonAccessor(this.meta.totalProperty);
                }

            
                
    if(this.meta.successProperty) {
                    
    this.getSuccess = this.getJsonAccessor(this.meta.successProperty);
                }


                
    if (this.meta.id) {
                    var g 
    = this.getJsonAccessor(this.meta.id);
                    
    this.getId = function(rec) {
                        var r 
    = g(rec);
                        
    return (r === undefined || r === ""? null : r;
                    }
    ;
                }
     else {
                    
    this.getId = function(){return null;};
                }

                
    this.ef = [];
                
    for(var i = 0; i < fields.length; i++){
                    f 
    = fields.items[i];
                    var map 
    = (f.mapping !== undefined && f.mapping !== null? f.mapping : f.name;
                    
    this.ef[i] = this.getJsonAccessor(map);
                }

            }


           var records 
    = [];
           var root 
    = o.data, c = root.length, totalRecords = c, success = true;

           
    if(this.meta.totalProperty){
            var v 
    = parseInt(this.getTotal(o), 10);
                
    if(!isNaN(v)){
                    totalRecords 
    = v;
                }

            }


            
    if(this.meta.successProperty){
                var v 
    = this.getSuccess(o);
                
    if(v === false || v === 'false'){
                    success 
    = false;
                }

            }


            
    for(var i = 0; i < c; i++){
            var n 
    = root[i];
          var values 
    = {};
          var id 
    = this.getId(n);
          
    for(var j = 0; j < fields.length; j++){
                    f 
    = fields.items[j];
            var v 
    = this.ef[j](n);                        
            values[f.name] 
    = f.convert((v !== undefined) ? v : f.defaultValue);
          }

          var record 
    = new recordType(values, id);
          records[i] 
    = record;
        }


        
    return {
           success : success,
           records : records,
           totalRecords : totalRecords
        }
    ;
      }

    }
    );

         paging.js,分頁時的調(diào)用的寫法。
      
    /*

     * Ext JS Library 1.0.1

     * Copyright(c) 2006-2007, Ext JS, LLC.

     * licensing@extjs.com

     * 

     * 
    http://www.extjs.com/license

     
    */




    Ext.onReady(function()
    {


        var recordType 
    = Ext.data.Record.create([

            
    {name: "id", type: "int"},

            
    {name: "department", type: "string"},

            
    {name: "operator", mapping:"operator.pname", type: "string"},

            
    {name: "content", mapping:"content", type: "string"}

          ]);

              
        
    // create the Data Store
        var ds = new Ext.data.Store({
            
    // load using DWRProxy
            proxy: new Ext.data.DWRProxy(MeetingService.findMeetingby, true),

            
    // create reader that reads the Topic records
            reader: new Ext.data.ListRangeReader({
                totalProperty: 
    'totalSize',
                id: 
    'id'
            }
    , recordType),

            
    // turn on remote sorting
            remoteSort: true
        }
    );
        
    //ds.setDefaultSort('department', 'desc');

        
    // pluggable renders
        function renderTopic(value, p, record){
            
    return String.format('<b>{0}</b>{1}', value, record.data['operator']);
        }

        function renderTopicPlain(value)
    {
            
    return String.format('<b><i>{0}</i></b>', value);
        }

        function renderLast(value, p, r)
    {

            
    return String.format('{0}<br/>by {1}', value, r.data['department']);
        }

        function renderLastPlain(value)
    {
            
    return value;
        }


        
    // the column model has information about grid columns
        
    // dataIndex maps the column to the specific data field in
        
    // the data store
        var cm = new Ext.grid.ColumnModel([{
               id: 
    'department'// id assigned so we can apply custom css (e.g. .x-grid-col-topic b { color:#333 })
               header: "部門",
               dataIndex: 
    'department',
               width: 
    150,
               renderer: renderTopic,

               sortable: 
    true,
               css: 
    'white-space:normal;'
            }
    ,{
               header: 
    "操作人",
               dataIndex: 
    'operator',
               width: 
    150,

               sortable: 
    true,
               hidden: 
    false        //    隱藏列
            }
    ,{
               id: 
    'content',
               header: 
    "內(nèi)容",
               dataIndex: 
    'content',
               width: 
    250,

               sortable: 
    true,
               renderer: renderLast
            }
    ]);

        
    // by default columns are sortable
        
    //cm.defaultSortable = true;

        
    // create the editor grid
        var grid = new Ext.grid.Grid('meeting-grid'{
            ds: ds,
            cm: cm,
            selModel: 
    new Ext.grid.RowSelectionModel({singleSelect:true}),
            enableColLock:
    false,
            loadMask: 
    true    //是否顯示正在加載
        }
    );

        
    // make the grid resizable, do before render for better performance
        var rz = new Ext.Resizable('meeting-grid'{
            wrap:
    true,
            minHeight:
    100,
            pinned:
    true,
            handles: 
    's'
        }
    );
        rz.on(
    'resize', grid.autoSize, grid);

        
    // render it
        grid.render();

        var gridFoot 
    = grid.getView().getFooterPanel(true);

        
    // add a paging toolbar to the grid's footer
        var paging = new Ext.PagingToolbar(gridFoot, ds, {
            pageSize: 
    5,
            displayInfo: 
    true,
            displayMsg: 
    '顯示 {0} - {1} of {2}',
            emptyMsg: 
    "沒有記錄"
        }
    );
        
    // add the detailed view button
        paging.add('-'{
            pressed: 
    true,
            enableToggle:
    true,
            text: 
    '詳細信息',
            cls: 
    'x-btn-text-icon details',
            toggleHandler: toggleDetails
        }
    );

        
    // trigger the data store load
       
    // ds.load({params:{start:0, limit:5}, extraParams:{dept:'test', viaParam:true}});        

        
    //ds.load({params:{start:0, limit:5, department:'test', viaPara:true}});    

        
    //ds.load({params:{start:0, limit:5}});    

        

        
    //查詢時需要用到的參數(shù)

        ds.on(
    'beforeload', function() {

              ds.baseParams 
    = {

                dept: 
    'test111',

                viaParam: 
    true

              }
    ;

            }
    );    

        
    //分頁基本參數(shù)    

        ds.load(
    {params:{start:0, limit:5}});    

            

        function toggleDetails(btn, pressed)
    {
            cm.getColumnById(
    'department').renderer = pressed ? renderTopic : renderTopicPlain;
            cm.getColumnById(
    'content').renderer = pressed ? renderLast : renderLastPlain;
            grid.getView().refresh();
        }

    }
    );

      dwr調(diào)用后臺的處理方式:

    public ListRange findMeetingby(Map condition) {
            
    // TODO Auto-generated method stub
            int totalRecords = getContentCount();
            HQuery hquery 
    = new HQuery();
            hquery.setPageStartNo(Integer.parseInt(condition.get(
    "start").toString()));
            hquery.setNumberPerPages(Integer.parseInt(condition.get(
    "limit").toString()));
            hquery.setQueryString(
    "from Meeting as a ");
            StringBuffer sb 
    = new StringBuffer();
            sb.append(
    "order by ");
            
    if(condition.get("sort"!= null && condition.get("dir"!= null){
                sb.append(
    "a.");
                sb.append(condition.get(
    "sort"));
                sb.append(
    " ");
                sb.append(condition.get(
    "dir"));
            }
    else
                sb.append(
    "a.lastModifiedDate desc");
            
            hquery.setOrderby(sb.toString());
            List ls 
    =  this.getBaseDao().executeQuery(hquery);
            
    return new ListRange(ls.toArray(), totalRecords);
        }

       

     

    posted on 2007-06-05 09:30 凍僵的魚 閱讀(8524) 評論(33)  編輯  收藏

    FeedBack:
    # re: 結(jié)合dwr的yui-ext分頁例子[未登錄]
    2007-06-05 13:21 | yy
    可以提供dome下載么  回復(fù)  更多評論
      
    # re: 結(jié)合dwr的yui-ext分頁例子
    2007-06-05 17:19 | 凍僵的魚
    已經(jīng)加上Demo下載了  回復(fù)  更多評論
      
    # re: 結(jié)合dwr的yui-ext分頁例子
    2007-06-06 10:22 | 匿名
    所提供的代碼運行時報錯,TodoService未定義,錯誤是從grid.js中報出來的  回復(fù)  更多評論
      
    # re: 結(jié)合dwr的yui-ext分頁例子
    2007-06-06 16:14 | 凍僵的魚
    由于這里只能上傳2M附件,我把例子lib目錄里面dwr.jar和spring.jar刪掉了,你把dwr2.0.1、Spring2.0.4放進去就能運行了。
      回復(fù)  更多評論
      
    # re: 結(jié)合dwr的yui-ext分頁例子
    2007-06-06 16:14 | hama
    盜版  回復(fù)  更多評論
      
    # re: 結(jié)合dwr的yui-ext分頁例子
    2007-06-06 16:14 | hama
    完全盜版  回復(fù)  更多評論
      
    # re: 結(jié)合dwr的yui-ext分頁例子
    2007-06-06 16:46 | 凍僵的魚
    我也已經(jīng)說過是參考了yui-ext論壇里面的文章,但它那個例子有些問題,翻頁和排序時自定義的參數(shù)傳掉,在這基礎(chǔ)上做了一些改動,在IE7和FF都測試通過。  回復(fù)  更多評論
      
    # re: 結(jié)合dwr的yui-ext分頁例子
    2007-06-06 17:42 | 匿名
    我放了的,共放了3個jar:commons-logging-1.0.4.jar、dwr.jar、spring.jar,但出現(xiàn)TodoService未定義的錯誤
    to:凍僵的魚 這個代碼你運行正常?  回復(fù)  更多評論
      
    # re: 結(jié)合dwr的yui-ext分頁例子
    2007-06-06 17:58 | 凍僵的魚
    代碼是測試通過的,你看下是不是DWR與tomcat有沖突了,看下tomcat日志  回復(fù)  更多評論
      
    # re: 結(jié)合dwr的yui-ext分頁例子
    2007-06-07 14:41 | 匿名
    原來是我把dwr的包弄錯了,我用的是1.1的包,換成2.0.1就正常了,謝謝  回復(fù)  更多評論
      
    # re: 結(jié)合dwr的yui-ext分頁例子
    2007-06-15 12:18 | mican
    你的那個 dwrproxy.js 是否是通用的,就是我改了一下grid.js 里的recordType,有個字段為時間類型,我是這樣設(shè)置的
    var recordType = Ext.data.Record.create([
    {name: "id", type: "int"},
    {name: "user",mapping:"aMsg.user", type: "string"},
    {name: "sayto", mapping:"aMsg.sayto", type: "string"},
    {name: "content",mapping:"aMsg.content", type: "string"},
    {name: "sendtime", mapping:"aMsg.sendtime", type: "date",dateFormat: 'timestamp'}
    ]);
    但是運行的時候他老抱這個錯:Error: TypeError, 'response' 未定義,請指點  回復(fù)  更多評論
      
    # re: 結(jié)合dwr的yui-ext分頁例子
    2007-06-15 15:17 | 凍僵的魚
    你的aMsg.sendtime是什么日期類型的?
    我測試過java.util.Date和java.sql.Timestamp都正常~~  回復(fù)  更多評論
      
    # re: 結(jié)合dwr的yui-ext分頁例子
    2007-06-15 15:57 | 解凍的魚
    我也來試試,謝謝斑竹  回復(fù)  更多評論
      
    # re: 結(jié)合dwr的yui-ext分頁例子
    2007-06-15 16:30 | 解凍的魚
    不錯,我在新公司可以借鑒。
    我以前公司的ajax界面,可以做到上邊是每條記錄的form,下邊是list列表,兩個公用一個dataset,類似dephi.我發(fā)現(xiàn)workshop可以實現(xiàn)這樣的功能,yui不知道可不可以。  回復(fù)  更多評論
      
    # re: 結(jié)合dwr的yui-ext分頁例子
    2007-06-16 13:34 | mican
    凍僵的魚 能說說ds 和cm里 的時間類型你是怎么定義的,比如我返回的數(shù)據(jù)里的時間格式是:yyyy-MM-dd hh:mm:ss  回復(fù)  更多評論
      
    # re: 結(jié)合dwr的yui-ext分頁例子
    2007-06-18 09:32 | 凍僵的魚
    to mican
    只需要在cm定義指定一個renderer就可以了
    var cm = new Ext.grid.ColumnModel(
    [

    {
    header: 'Reg Date',
    width: 150,
    sortable: true,
    renderer: Ext.util.Format.dateRenderer('Y/m/d'),
    dataIndex: 'regDate'
    }
    ]
    );  回復(fù)  更多評論
      
    # re: 結(jié)合dwr的yui-ext分頁例子
    2007-06-18 09:40 | 凍僵的魚
    to 解凍的魚
    我也在嘗試實現(xiàn)類似你所說的那種效果,對于yui,我也是剛接觸不久,希望有空可以多交流AJAX技術(shù),MSN:zyh2k at msn.com。  回復(fù)  更多評論
      
    # re: 結(jié)合dwr的yui-ext分頁例子
    2007-06-22 09:57 | 解凍的魚
    我看了yui-ext的form,是store刷新的,應(yīng)該可以實現(xiàn)我說的那種功能。
    yui-ext其實是無所不能的,還支持拖動,太牛了。  回復(fù)  更多評論
      
    # re: 結(jié)合dwr的yui-ext分頁例子
    2007-06-22 10:03 | 解凍的魚
    我的msn:matt_wang129@hotmail.com,多交流  回復(fù)  更多評論
      
    # re: 結(jié)合dwr的yui-ext分頁例子
    2007-07-12 19:20 | Harrison
    感謝大蝦的幫助先!
    我的問題:
    ReferenceError: response is not defined

    怎么回事?  回復(fù)  更多評論
      
    # re: 結(jié)合dwr的yui-ext分頁例子
    2007-07-13 09:33 | 凍僵的魚
    to Harrison:
    在dwr調(diào)試頁面對調(diào)用的方法測試正常不?  回復(fù)  更多評論
      
    # re: 結(jié)合dwr的yui-ext分頁例子
    2007-07-13 10:49 | Harrison
    To 凍僵的魚
    十分感謝您的回復(fù)先!
    沒錯,我的DWR調(diào)用很正常,后臺Debug時,在service里也返回的正常的數(shù)據(jù)。在FF下的FireBug中也看到了script的response。

    另外,我的msn: gyao1979@hotmail.com , 想和您深入交流。謝謝!  回復(fù)  更多評論
      
    # re: 結(jié)合dwr的yui-ext分頁例子
    2007-08-12 23:33 | jiajiacat
    謝謝,不過 findMeetingby(Map condition) 非范型,dwr老是出
    WARN DefaultConverterManager:59 - Missing type info for getItems(0<0>). Assuming this is a map with String keys. Please add to <signatures> in dwr.xml的警告,如何解決?  回復(fù)  更多評論
      
    # re: 結(jié)合dwr的yui-ext分頁例子
    2007-08-15 10:20 | xx
    根本就顯示不出數(shù)據(jù),dwr以及該目錄下的js怎么沒有?  回復(fù)  更多評論
      
    # re: 結(jié)合dwr的yui-ext分頁例子
    2007-08-31 09:28 | 凍僵的魚
    @jiajiacat
    dwr.xml配置一下signatures就行了  回復(fù)  更多評論
      
    # re: 結(jié)合dwr的yui-ext分頁例子
    2007-08-31 09:30 | 凍僵的魚
    @xx
    由于這里只能上傳2M附件,我把例子lib目錄里面dwr.jar和spring.jar刪掉了,你把dwr2.0.1、Spring2.0.4放進去就能運行了。
      回復(fù)  更多評論
      
    # re: 結(jié)合dwr的yui-ext分頁例子
    2007-09-27 17:29 | xpy
    十分感謝您!還有些問題想問問。我MSN:z278440337@126.com  回復(fù)  更多評論
      
    # re: 結(jié)合dwr的yui-ext分頁例子
    2007-11-08 17:26 | powe
    麻煩樓主解答下,我后臺返回的數(shù)據(jù)是個List類型的,List的元素是Bean,那為什么頁面沒數(shù)據(jù)顯示阿,也沒報錯。ListRange類型的我的包里怎么沒有!  回復(fù)  更多評論
      
    # re: 結(jié)合dwr的yui-ext分頁例子
    2007-12-13 15:40 | 凍僵的魚
    @powe
    不好意思,最近比較忙,很少上blog
    "List的元素是Bean", 你在dwr.xml有沒有定義相應(yīng)的convert bean?
    例子里面的ListRange類,你可以不使用它,只需要在后臺按格式封裝數(shù)據(jù)就行:
    public ListRange findMeetingby(Map condition) {
    .......
    hquery.setOrderby(sb.toString());
    List ls = this.getBaseDao().executeQuery(hquery);
    //return new ListRange(ls.toArray(), totalRecords); //這里可以不使用ListRange類

    Map result = new HashMap(2);
    result.put("totalSize", new Integer(totalRecords));
    result.put("data", ls.toArray());
    return result;
    }
      回復(fù)  更多評論
      
    # re: 結(jié)合dwr的yui-ext分頁例子
    2008-02-28 22:27 | jw
    這個支持排序嗎,在哪個地方啊?  回復(fù)  更多評論
      
    # re: 結(jié)合dwr的yui-ext分頁例子
    2008-03-15 22:40 | yinhao
    看來樓主,對EXT有很深的研究呀.
    小弟,最近出現(xiàn)了一個問題,煩了我好幾天呀.不知道樓主能不能幫小弟解決一下.
    在下,不勝感激.

    當(dāng)我訪問DWR里面的方法時,數(shù)據(jù)返回正常.可是到頁面EditGrid里面卻只有列標題.表格里面沒有任何數(shù)據(jù).而且,頁面也沒有報錯.

    急救.


      回復(fù)  更多評論
      
    # re: 結(jié)合dwr的yui-ext分頁例子[未登錄]
    2008-04-02 16:40 | sean
    怎么沒有排序的功能啊?  回復(fù)  更多評論
      
    # re: 結(jié)合dwr的yui-ext分頁例子
    2010-02-16 15:45 | kingdy
    非常感謝分享,在搞一個ext和dwr整合的項目,現(xiàn)在問題解決了。  回復(fù)  更多評論
      

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     

    <2008年2月>
    272829303112
    3456789
    10111213141516
    17181920212223
    2425262728291
    2345678

    常用鏈接

    留言簿(3)

    隨筆檔案(4)

    相冊

    搜索

    •  

    積分與排名

    • 積分 - 14063
    • 排名 - 2060

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 永久黄网站色视频免费观看| 亚洲?v无码国产在丝袜线观看| 全部免费毛片免费播放| 亚洲国产精品无码一线岛国| 亚洲人成电影网站| 黄页免费视频播放在线播放| 免费A级毛片无码视频| 国产美女无遮挡免费视频| 亚洲大尺度无码专区尤物| 亚洲狠狠婷婷综合久久蜜芽| 国产拍拍拍无码视频免费| 永久中文字幕免费视频网站| 亚洲国产精品一区二区久久| 国产尤物在线视精品在亚洲| 97在线视频免费| 中文字幕在亚洲第一在线| 91丁香亚洲综合社区| 91在线视频免费观看| 日韩电影免费在线观看视频 | 亚洲AV无码一区东京热| 亚洲国产精品无码观看久久| 99精品在线免费观看| 亚洲成A人片在线观看无码3D | 成人午夜性A级毛片免费| 亚洲国产精品成人久久| 国产精品亚洲综合天堂夜夜| 亚洲最大免费视频网| 亚洲日韩欧洲无码av夜夜摸| 亚洲AV性色在线观看| 天天影院成人免费观看| 亚洲日韩小电影在线观看| 精品免费AV一区二区三区| 成年女性特黄午夜视频免费看| 亚洲国产成人久久精品动漫| jizz18免费视频| 国产高清在线精品免费软件| 精品亚洲AV无码一区二区三区| 久久这里只精品国产免费10| 久久久久久亚洲精品不卡| 另类图片亚洲校园小说区| 在线观看免费宅男视频|