我通过台下生成了一个带分页的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,这里怎么不能跟贴回复,我只能以问题补充来追加?