我在SenchaTouch 2中使用了ListPaging插件也遇到了类似的问题,并成功解决了数据集结束时“加载更多”消息的行为。
这基于John Gordon提供的内容(关于指定pageSize
和clearOnPageLoad
配置选项),因为这些属性在Senchatouch 2中似乎是相同的。我没有详细查看SenchaTouch 1.x。在SenchaTouch 2中,所有配置选项都必须在一个config
属性中定义:
Ext.define('MessagingApp.store.MessageThreads', {
extend : 'Ext.data.Store',
requires: ['MessagingApp.model.MessageThread'],
config:
{
model: 'MessagingApp.model.MessageThread',
autoLoad: false,
clearOnPageLoad: false,
pageSize: 10,
proxy: {
type: 'jsonp',
pageParam: 'currentPage',
limitParam: 'pageSize',
url: APIURL + '/message-app-service/GetMessageThreads',
reader: {
type: 'json',
rootProperty: 'Data'
}
}
}
});
在视图中,我们可以指定插件并覆盖“加载更多”和“没有更多记录”的消息:
{
xtype:'dataview',
store:'MessageThreads',
id:'threadList',
itemTpl:Ext.create('Ext.XTemplate',
'<!-- template markup goes here -->',
{
}
),
plugins:[
{
xclass:'Ext.plugin.ListPaging',
autoPaging: true,
loadMoreText: 'Loading...',
noMoreRecordsText: 'All messages loaded'
}
]
}
问题在于,尽管我们的Web服务返回了特定页面的记录数组,但没有总计数属性,这是插件确定所有记录已加载的必要条件。因此,现有问题是,“加载更多”消息将一直存在(接受解决方案中的问题#1)。因此,在我们控制器的
init
函数中,我们必须为存储库上的
load
事件附加事件处理程序,以便在接收到新数据页面时进行钩取:
Ext.define('MessagingApp.controller.Messages',
{
extend: 'Ext.app.Controller',
config:
{
views: [
'MessageThreads',
],
stores: [
'MessageThreads'
],
refs:
{
}
},
init: function() {
this.control(
{
});
var threadStore = Ext.getStore('MessageThreads');
threadStore.addBeforeListener('load', this.checkForThreadListEnd, this);
},
});
在处理程序中,当返回的记录数小于页面大小时,我们会意识到已经到达数据集的末尾。如果总记录数是页面大小的倍数,则最后一页将有一个空数组。一旦确定了数据集的末尾,我们就会更新存储的totalCount
配置属性:
checkForThreadListEnd: function(store, records, isSuccessful) {
var pageSize = store.getPageSize();
var pageIndex = store.currentPage - 1;
if(isSuccessful && records.length < pageSize)
{
var totalRecords = pageIndex * pageSize + records.length;
store.setTotalCount(totalRecords);
}
else
store.setTotalCount(null);
},
因为这是一个“before”事件处理程序,所以在插件决定是否显示“加载更多”或“没有更多记录”消息之前,此属性将至关重要地更新。不幸的是,框架并没有提供隐藏“没有更多记录”消息的方法,因此必须通过CSS来完成。
希望这可以帮到你。
loadTpl
配置属性中的XTemplate应用的)。您可以尝试一些魔法来拦截此按钮的点击事件并返回false(取消事件),或者使用时髦的CSS选择器来隐藏其“没有更多记录”的状态下的按钮。您可以在docs.sencha.com上查看Sencha如何实现它的内部机制。 - d_mcg