zeldazld 2009-08-17 18:19
浏览 291
已采纳

ext中分页后,,那个刷新按钮怎么用?

我通过台下生成了一个带分页的combobox

 

var ds = new Ext.data.Store({
        proxy: new Ext.data.PagingMemoryProxy(arr),
        remoteSort:true,
        reader:new Ext.data.ArrayReader({},[
            {name:'bookId'},
            {name:'bookName'}
        ])
    });


var bookSelect = new Ext.form.ComboBox({
        id: 'bookIdMG',
        fieldLabel: resourceBundleHandler.getLabel('SELECT_BOOK_TO_LIST'),
        store:ds,
        valueField: 'bookId',
        displayField: 'bookName',
        typeAhead: true,
        mode:'remote',
        pageSize:5,
        triggerAction: 'all',
        selectOnFocus: true,
        minListWidth: 230,
        emptyText: resourceBundleHandler.getLabel('SELECT_EMPTY_TEXT1'),
        readOnly: true,
        allowBlank: false
    });
这样确实能生成一个带有分页的combobox(combobox只要加一个pageSize属性就可以实现,但“mode”属性一定要是remote),可当数据库中的数据发生了变化,我就想通地点击这上面
的刷新按钮来更新数据来显示但发现刷新只是对之前的store进行了刷新,并不会去执行相应的操作,于是我就又采用了下面的方法:
Ext.PagingToolbar.prototype.onClick = function(which){
        var store = this.store;
        
        switch(which){
            case "first":
                this.doLoad(0);
            break;
            case "prev":
                this.doLoad(Math.max(0, this.cursor-this.pageSize));
            break;
            case "next":
                this.doLoad(this.cursor+this.pageSize);
            break;
            case "last":
                var total = store.getTotalCount();
                var extra = total % this.pageSize;
                var lastStart = extra ? (total - extra) : total-this.pageSize;
                this.doLoad(lastStart);
            break;
            case "refresh"://主要是加了下面二句取后台及ds重新load
                            arr=getInfoByDB();
                            ds.loadDate(arr);
            break;
        }
    }

 这样子能通过刷新后去后台拿到最新的数据(可以用了loadDate(arr)后又失去了分页效果,数据全在一页显示出来,分页条还是存在),可是这个分页条的store并没有重新加载,当点击上一页或下一页等其它按钮的时候,数据又回到了刷新前的数据了。。。

 

不知道我描述的清楚不,,,,,或者我只是想知道:如何在分页以后,点刷新能去DB中拿出新的数据显示出来。。。。


问题补充:
非常感谢“yourgame”的关注,可以我的问题有点不同
1,我不能在定义store的时候通过url远程去拿数据,因为我们有专门的action跳后台拿数据,再通过我上面的方法构造一个store,所以这样也就无法用store.reload()了,,reload是通过store中的url去重新拿数据的(大概是 这样)


问题补充:
因为我们自己有自己整合的框架,请求后台有专门的方法,并不是直接通过一个url就可以跳到servlet去的,所以我只有通过点这个刷新按钮去启动一方法拿 到最新的数据,再来更新这个store,所以我才去改了那个onclick方法,当刷新的时候再去拿最新数据,数据是拿过来了,可通过store的loadData()却没用。。。
我没有用过reload()(reload()就需要store中的url属性的支持去后台拿 数据的。所以这个在我这根本不可以,我没办法提供这个后台的servlet访问),ext也是自己在网上学的,身边也没有很懂的人(习惯了一种思维,没个人直接给我提示一下也转不过来。理解不了)


--非常感谢您(yourgame)的关注。。。
问题补充:
1,单独做了个例子,ds用url去servlet拿数据,这样在分页条中,它每点一次按钮(如前一页,后一页)都会到后台拿一次数据(这样就适合做真分页,跟据pagesize和当前页去db拿数据再到前台显示),对于这点有一个新的问题:怎么去拿到当前页,会自动传到后台吗?
以上的例子我其实最后还是分页没有成功,数据显示在一页里(但如我有10条数据,每页5条,它还真是分了二页,只不这每页都是同样的10条数据),就是分页失败了。加上store.load({params:{start:0, limit:10}}); 也没用,,怪怪的,,,
不过以上方法倒是挺方便的。。。。(只是我还要再研究下。。)

2,像我之前那种ds构造做的其实是一个假分页,只是以分页显示而以。。。。。

3,这里怎么不能跟贴回复,我只能以问题补充来追加?
  • 写回答

3条回答 默认 最新

  • zhoujuan520 2009-08-17 19:19
    关注

    简单问题复杂化了.如果用到了分页.一般都是要远程来获取数据的

    想刷新数据,我不明白为什么你要用这么复杂的方式,store.reload()不可以吗?

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog