这应该相当简单,但我还没有找到办法。
我使用的是ExtJs v.3.3。
我有一个网格面板,允许使用上下文菜单删除记录。
网格有一个附加到面板商店的分页工具栏。
删除过程向服务器发送ajax请求,成功后我从商店中删除记录(使用remove方法)。
问题是分页工具栏没有反映商店的变化,即在重新加载商店之前记录总量不变。
有没有办法在分页工具栏中设置记录总数?
由于
答案 0 :(得分:10)
这就像ExtJs ver 4.1.3的魅力一样。
gridStore.add(record); //Add the record to the store
gridStore.totalCount = gridStore.count(); //update the totalCount property of Store
pagingToolbar.onLoad(); //Refresh the display message on paging tool bar
答案 1 :(得分:5)
在数据库中删除数据后,您是否无法在响应中返回totalProperty值?
修改强>
您首先需要正确构建响应。根据分页工具栏的API Docs,它应该是这样的。
如果使用商店的autoLoad配置:
var myStore = new Ext.data.Store({
reader: new Ext.data.JsonReader({
totalProperty: 'results',
...
}),
...
});
var myStore = new Ext.data.Store({
autoLoad: {params:{start: 0, limit: 25}},
...
});
从服务器发回的数据包将具有以下形式:
{
"success": true,
"results": 2000,
"rows": [ // *Note: this must be an Array
{ "id": 1, "name": "Bill", "occupation": "Gardener" },
{ "id": 2, "name": "Ben", "occupation": "Horticulturalist" },
...
{ "id": 25, "name": "Sue", "occupation": "Botanist" }
]
}
答案 2 :(得分:4)
这对我来说很好:
me.gridStore.add(data);
// Manually update the paging toolbar.
me.gridStore.totalCount = 500;
me.pagingToolbar.onLoad();
答案 3 :(得分:2)
从第三方api获取结果时遇到了类似的问题,该第三方api具有单独的项目计数URL。我创建了一个从pagingtoolbar继承的新类,其中包含一个额外的updatePager()函数:
updatePager : function(){
var me = this,
pageData,
currPage,
pageCount,
afterText,
count,
isEmpty;
count = me.store.getCount();
isEmpty = count === 0;
if (!isEmpty) {
pageData = me.getPageData();
currPage = pageData.currentPage;
pageCount = pageData.pageCount;
afterText = Ext.String.format(me.afterPageText, isNaN(pageCount) ? 1 : pageCount);
} else {
currPage = 0;
pageCount = 0;
afterText = Ext.String.format(me.afterPageText, 0);
}
Ext.suspendLayouts();
me.child('#afterTextItem').setText(afterText);
me.child('#inputItem').setDisabled(isEmpty).setValue(currPage);
me.child('#first').setDisabled(currPage === 1 || isEmpty);
me.child('#prev').setDisabled(currPage === 1 || isEmpty);
me.child('#next').setDisabled(currPage === pageCount || isEmpty);
me.child('#last').setDisabled(currPage === pageCount || isEmpty);
me.child('#refresh').enable();
me.updateInfo();
Ext.resumeLayouts(true);
if (me.rendered) {
me.fireEvent('change', me, pageData);
}
}
});
我在添加到停靠栏时添加了一个itemId
dockedItems: [{
xtype: 'dynamicpagingtoolbar',
itemId: 'pager_id',
dock: 'bottom',
store: 'CompoundPharmacologyPaginatedStore',
displayInfo: true
}],
我在相关商店中添加了一个setTotalCount()函数:
setTotalCount: function(count) {
this.totalCount = count;
}
然后,当您想要更新它时,请调用store.setTotalCount(total),然后调用pager.updatePager()。请记住,您将首先使用
之类的内容获取寻呼机pager = grid_view.down('#pager_id');
答案 4 :(得分:0)
“删除过程向服务器发送ajax请求,成功后我从商店中删除记录(使用remove方法)......” - 这表明你有方法处理“删除”操作 - 如果你使用Ext.PagingToolbar - 只需添加一行如下:
(this).YourPagingToolbar.doRefresh()
我把(this)放在()中,因为你没有提供任何代码示例所以我不确定你是如何定义它的
答案 5 :(得分:0)
store.totalLength = store.totalLength - 1;
这会改变商店中的总行数,但我不确定此更改是否会被分页工具栏反映出来。
答案 6 :(得分:0)
尝试使用多个分页工具栏(网格的顶部/底部)时,我遇到了类似的情况。分页工具栏中唯一更新显示的地方在商店'load'上调用。因此,您可以手动触发事件(但要注意意外后果!)。在我的情况下,当从我的一个工具栏的beforechange监听器运行时,这很有效:
myStore.fireEvent('load', myStore, myStore.data.items, myStore.lastOptions);
或者......你可以覆盖或扩展PagingToolbar来添加一个调用或覆盖onLoad函数的公共方法
答案 7 :(得分:0)
如果您在分页工具栏中有多个页面,并在商店本地执行插入/删除操作,请使用下面的代码段。
updatePagingToolbar: function (pagingToolbar) {
var store = pagingToolbar.getStore()
, affectedChanges = store.getCount() - store.config.pageSize;
if (pagingToolbar.store.totalCount > store.config.pageSize)
pagingToolbar.store.totalCount += affectedChanges;
else
pagingToolbar.store.totalCount = store.getCount();
pagingToolbar.onLoad();
}