我已經受夠了在SenchaTouch 2 ListPaging插件類似的問題,並設法達到了數據集的末尾時,整理出「負載更多」消息的行爲。
此基礎上什麼約翰·戈登已經拿出了(關於指定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, // This is true by default
pageSize: 10, // This needs to be set for paging
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 -->',
{
//custom helper functions here
}
),
plugins:[
{
xclass:'Ext.plugin.ListPaging',
autoPaging: true,
// These override the text; use CSS for styling
loadMoreText: 'Loading...',
noMoreRecordsText: 'All messages loaded'
}
]
}
問題是,雖然我們的Web服務返回特定頁面的記錄數組,但沒有總計計數屬性,插件需要確定何時加載所有記錄。因此,「加載更多」信息將保留(接受解決方案中的問題#1)。因此,在我們的控制器的init
功能,我們必須重視的事件處理程序在商店load
事件掛鉤時,接收到的數據的一個新的頁面到:
Ext.define('MessagingApp.controller.Messages',
{
extend: 'Ext.app.Controller',
config:
{
views: [
'MessageThreads',
// Other views referenced by this controller
],
stores: [
'MessageThreads'
],
refs:
{
// References to UI elements by selector...
}
},
init: function() {
// Other internal initialisation...
this.control(
{
// Selector-object pairs...
});
// Provide a means to intercept loads of each page of records
var threadStore = Ext.getStore('MessageThreads');
threadStore.addBeforeListener('load', this.checkForThreadListEnd, this);
},
// Remaining controller functions...
});
在處理程序中,我們認識到,我們當返回的記錄數小於頁面大小時,已達到數據集的末尾。如果總記錄數量是頁面大小的倍數,則最後的'頁面'將具有空數組。一旦數據集的末尾已經確定,我們更新了商店的totalCount
配置屬性:
checkForThreadListEnd: function(store, records, isSuccessful) {
var pageSize = store.getPageSize();
var pageIndex = store.currentPage - 1; // Page numbers start at 1
if(isSuccessful && records.length < pageSize)
{
//Set count to disable 'loading' message
var totalRecords = pageIndex * pageSize + records.length;
store.setTotalCount(totalRecords);
}
else
store.setTotalCount(null);
},
// Other controller functions...
因爲這是一個「前」事件處理程序,此屬性將被決定性地更新插件決定之前是否顯示'加載更多'或'沒有更多記錄'的信息。不幸的是,該框架沒有提供隱藏'沒有更多記錄'消息的方法,所以這必須通過CSS完成。
希望這會有所幫助。
謝謝您的回答,也請讓我知道如果別的來了。 – keune
我的優秀項目中的第3項是我的代碼的錯。我有一段代碼會強制用戶在刷新數據時回到列表頂部,以避免sencha touch的列表組件出現另一個渲染錯誤。當替換列表的數據小於最初存在的數據時,該錯誤就會顯示出來,從而導致列表不理想。 –
您是否能夠找到第一個問題的解決方案:「如何在沒有更多記錄加載時關閉」更多「元素」? – CrocHunter