我通过台下生成了一个带分页的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中拿出新的数据显示出来。。。。
简单问题复杂化了.如果用到了分页.一般都是要远程来获取数据的
想刷新数据,我不明白为什么你要用这么复杂的方式,store.reload()不可以吗?
为什么呢?说明原因,你的目的不就是刷新数据吗?
而刷新数据 relaod是最好的方法,不能因为你的那个问题而去逃避他而找一个离谱的解决办法。我们要采用最佳解决方案。考虑的不仅仅是解决这个问题。还要考虑更多。比如通用,以及后期维护
你可以这样,点击按钮后动态创建一个store。url就是你现在要取数据的action,然后把创建的store替换掉目前的就可以了。具体参考这个combobox的api。貌似有一个setStore方法