本帖最后由 shenshengzhiwen 于 2014-11-11 17:47:30 编辑

解决方案 »

  1.   

    store .load({ params: { start: 0, limit: 50} });
                    var resultData = data.result;
                    store .loadRawData(eval(resultData));你的data哪里来的?如果是ajax加载的要放到success回调中进行加载显示limit指定的数据要你数据库依据传递的limit参数进行返回需要的数据,ext是不按照limit进行控制的,要你服务器端控制
      

  2.   


    这个data是dwr调用java的方法返回来的数据。ext不按照limit进行控制的话,那我怎么把数据的总条数传给ext呢?请求指教。
      

  3.   


    我省去了前面的dwr数据调用,所以你可以把data理解为传送过来的数据:[{executeTime: "Thu Jul 07 13:31:19 CST 2011",sqlContent: "SELECTT.SERV_PROV_CODE,T.STRING_KEY",parameters: "",spendTime: "2.125",recordNumber: "0" } ]
      

  4.   


    这个data是dwr调用java的方法返回来的数据。ext不按照limit进行控制的话,那我怎么把数据的总条数传给ext呢?请求指教。你直接配置ext的store url为你的动态页地址,返回的数据需要包含和你配置一样的数据模式。。少了总数据量是分页不了的按照你的配置,你返回动态页的数据结构应该类似{totalCount:10000,rows:[{...},{...}...]}这种数据结构,rows只包含需要的数据直接加载另外一个地址返回的数据,如你的dwr数据,应该使用Ext.data.proxy.Direct数据源,而不是ajax,可以看这个:Ext4 Ext.data.proxy.Direct directFn示例或者使用examples\ux\data\PagingMemoryProxy.js这个插件来对客户端数据进行分页。
      

  5.   


    这个data是dwr调用java的方法返回来的数据。ext不按照limit进行控制的话,那我怎么把数据的总条数传给ext呢?请求指教。你直接配置ext的store url为你的动态页地址,返回的数据需要包含和你配置一样的数据模式。。少了总数据量是分页不了的按照你的配置,你返回动态页的数据结构应该类似{totalCount:10000,rows:[{...},{...}...]}这种数据结构,rows只包含需要的数据直接加载另外一个地址返回的数据,如你的dwr数据,应该使用Ext.data.proxy.Direct数据源,而不是ajax,可以看这个:Ext4 Ext.data.proxy.Direct directFn示例或者使用examples\ux\data\PagingMemoryProxy.js这个插件来对客户端数据进行分页。现在我用PagingMemoryProxy.js来实现的时候运行到riskSQLStore.load({params:{start:0,limit:40}});报错如下:
    Unable to get property 'length' of undefined or null reference我的代码如下:
    var resultData = data.result;
                 debugger;
                 var obj= eval(resultData);
                 var riskSQLStore = Ext.data.StoreManager.lookup('RiskySQLStore');
                 riskSQLStore.proxy = new Ext.data.PagingMemoryProxy(obj);
                 riskSQLStore.load({params:{start:0,limit:40}});store.js中的代码:
    constructor: function(cfg) {
            var me = this;
            cfg = cfg || {};
            me.callParent([Ext.apply({
                storeId: 'RiskySQLStore',
                //model: 'AADashboard.model.RiskySQLModel',
                pageSize:40,
                autoLoad: true,
                proxy: {
                    type: 'ajax',
                    reader: {
                        type: 'array',
                        rootProperty: 'rows',
                        totalProperty: 'totalCount',
                    }
                },
                fields: [
                    {
                        name: 'executeTime'
                    },
                    {
                        name: 'sqlContent'
                    },
                    {
                        name: 'parameters'
                    },
                    {
                        name: 'spendTime'
                    },
                    {
                        name: 'recordNumber'
                    }
                ]
            }, cfg)]);
        }返回数据的格式:
    [{ success:true,
                  totalCount:"1",
     rows:[
                       {
                           executeTime: "Thu Jul 07 13:31:19 CST 2011",
                           sqlContent: "SELECT T.SERV_PROV_CODE,T.STRING_KEY",
                           parameters: "",
                           spendTime: "2.125",
                           recordNumber: "0"
                       }
     ]
     
                } ]麻烦再帮我看下我哪个地方配错了呢?
      

  6.   

    客户端数据不需要调用load方法,那个是remote模式的(配置了url),你返回了那种数据就不需要调用load放了啊,也不需要用dwr是什么的再次加载数据,ext会自动发送ajax请求i配置的url地址获取数据的,pagingtoolbar也会自动进行分页,点击分页按钮会发送下一页参数到动态页去,参数名为pagevar resultData = data.result;
                 debugger;
                 var obj= eval(resultData);
                 var riskSQLStore = Ext.data.StoreManager.lookup('RiskySQLStore');
                 riskSQLStore.proxy = new Ext.data.PagingMemoryProxy(obj);
                 riskSQLStore.load({params:{start:0,limit:40}});
    这个不需要了
    constructor: function(cfg) {
            var me = this;
            cfg = cfg || {};
            me.callParent([Ext.apply({
                storeId: 'RiskySQLStore',
                //model: 'AADashboard.model.RiskySQLModel',
                pageSize:40,
                autoLoad: true,
                proxy: {
                    type: 'ajax',
                    reader: {
                        type: 'array',
                        rootProperty: 'rows',
                        totalProperty: 'totalCount',
                    }
                },这里改为constructor: function(cfg) {
            var me = this;
            cfg = cfg || {};
            me.callParent([Ext.apply({
                storeId: 'RiskySQLStore',
                //model: 'AADashboard.model.RiskySQLModel',
                pageSize:40,
                autoLoad: true,
                proxy: {
                    type: 'ajax',url:'你的dwr请求的动态页地址',
                    reader: {
                        type: 'json',//////////
                        rootProperty: 'rows',
                        totalProperty: 'totalCount',
                    }
                },这样就行了。。不需要用dwr获取数据。。楼主好好找一个带有分页示的grid示例来看看
    Ext Grouping Grid分组添加分页
      

  7.   


    现在框架式dwr+extjs。dwr是通过callback返回数据结果的,例如:
    java类的别名.方法名({callback: function(data) {
                 var resultData = data.result;
                 debugger;
                 var obj= eval(resultData);
                 var riskSQLStore = Ext.data.StoreManager.lookup('RiskySQLStore');
                 riskSQLStore.proxy = new Ext.data.PagingMemoryProxy(obj),//PagingMemoryProxy()一次性读取数据
                 riskSQLStore.load({params:{start:0,limit:40}});//按5条记录分布 
                 debugger;
            }});
    而且返回的data是封装好的一个json字符串。我们要用到的数据只是这个对象中的一个属性result。按你说的url:'你的dwr请求的动态页地址', 这样也装配不到toolbar中去,网上的grid示例我看过几个了,貌似都是用ajax的url来取数据。
      

  8.   

    以前我的处理是var resultData = data.result;
    var obj= eval(resultData);
    var riskSQLStore = Ext.data.StoreManager.lookup('RiskySQLStore');
    riskSQLStore.loadData(obj);
    这样可以加载全部数据,现在需要分页,这种不行了,我看了有资料说如果是引用外部的data的时候proxy和reader就不能用了。我想应该是这个导致分页出问题了。这样还得回到用url这种方式处理数据了?现在dwr返回的数据在callback中也不好处理。
      

  9.   


    如果你确实要dwr返回的数据,就需要PagingMemoryProxy.js这个插件了。。ext5对这个插件做了调整。。合并到Ext.data.proxy.Memory里面,配置enablePaging就行。。参考:Ext5 Ext.data.proxy.Memory客户端数据分页示例而且loadData方法有点问题,无法分页。。只能在构造的时候直接配置data属性才能分页,具体看上面的
      

  10.   


    如果你确实要dwr返回的数据,就需要PagingMemoryProxy.js这个插件了。。ext5对这个插件做了调整。。合并到Ext.data.proxy.Memory里面,配置enablePaging就行。。参考:Ext5 Ext.data.proxy.Memory客户端数据分页示例而且loadData方法有点问题,无法分页。。只能在构造的时候直接配置data属性才能分页,具体看上面的按照你给的例子我的分页出来了。不过现在又一个问题来了。gridpanel中的数据不见了。我的代码如下:var store = Ext.create('Ext.data.Store', {
                         model: 'AADashboard.model.RiskySQLModel',
                         pageSize: 50,
                         autoLoad: true, //自动加载,需要配置MemoryProxy的data属性,手动经测试无法分页,不知道是不是bug
                         proxy: new Ext.data.MemoryProxy({ data: resultData, reader: { type: 'json' }, enablePaging: true })
                     });var pagingToolbar = new Ext.PagingToolbar({ store: store, displayInfo: true });
                     
                     var grid = Ext.create('Ext.grid.Panel', {
                      autoScroll: true,
                      frame: true,
                      title: 'QL',
                      itemId: 'SQLTab',
                      iconCls: 'icon-grid', 
                      store: store,
                      columns: [{
                        header: 'Time',
                             width: '6%',
                             dataIndex: 'executeTime',
                         },
                         {
                          header: 'SQL',
                             dataIndex: 'sqlContent',
                             flex: 1
                         },
                         {
                          header: 'Parameters',
                             width: '20%',
                             dataIndex: 'parameters',
                         },
                         {
                          header: 'Spend Time',
                             width: '6%',
                             dataIndex: 'spendTime',
                         },
                         {
                          header: 'Counts',
                             width: '5%',
                             dataIndex: 'recordNumber',
                         }],
                      bbar: pagingToolbar
                     });
                     
                     Ext.getCmp('TabPanel').add(grid).show();
    帮忙分析一下是什么原因、
      

  11.   


    如果你确实要dwr返回的数据,就需要PagingMemoryProxy.js这个插件了。。ext5对这个插件做了调整。。合并到Ext.data.proxy.Memory里面,配置enablePaging就行。。参考:Ext5 Ext.data.proxy.Memory客户端数据分页示例而且loadData方法有点问题,无法分页。。只能在构造的时候直接配置data属性才能分页,具体看上面的
      

  12.   


    如果你确实要dwr返回的数据,就需要PagingMemoryProxy.js这个插件了。。ext5对这个插件做了调整。。合并到Ext.data.proxy.Memory里面,配置enablePaging就行。。参考:Ext5 Ext.data.proxy.Memory客户端数据分页示例而且loadData方法有点问题,无法分页。。只能在构造的时候直接配置data属性才能分页,具体看上面的OK了。找出原因了。这个store还得Load一下。所以谢谢你了哦。