Ho avuto un problema simile con il plugin ListPaging in SenchaTouch 2, e sono riusciti a risolvere il 'più carico di' comportamento messaggio quando viene raggiunta la fine del set di dati.
Questo si basa su ciò che John Gordon ha messo a punto (per quanto riguarda specificando le opzioni pageSize
e clearOnPageLoad
config), dal momento che queste proprietà sembrano essere lo stesso in Senchatouch 2. Non ho guardato SenchaTouch 1.x in dettaglio. In SenchaTouch 2, tutte le opzioni di configurazione devono essere definiti in una proprietà 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'
}
}
}
});
Nella vista, in cui si specificano i plugin, siamo in grado di ignorare il 'carico di piu' e messaggi 'non più record':
Il problema è che mentre il nostro servizio Web restituisce una serie di record per una determinata pagina, non esiste una proprietà di conteggio totale, necessaria per determinare quando sono stati caricati tutti i record. Quindi, così com'è, rimarrà il messaggio 'Carica altro' (numero 1 nella soluzione accettata).Quindi, nella funzione init
del nostro controller, dobbiamo collegare un gestore di eventi per l'evento load
sul negozio per collegare in quando si riceve una nuova pagina di dati:
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...
});
Nel gestore, ci rendiamo conto che abbiamo Abbiamo raggiunto la fine del set di dati quando il numero di record restituiti è inferiore alla dimensione della pagina. Se il numero totale di record è un multiplo della dimensione della pagina, l'ultima 'pagina' avrà una matrice vuota. Una volta che la fine del set di dati è stato identificato, aggiorniamo la proprietà totalCount
config del negozio:
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...
Perché questa è una 'prima' gestore di eventi, questa proprietà sarà cruciale aggiornato prima il plugin decide se visualizza i messaggi 'carica più' o 'non più record'. Sfortunatamente, il framework non fornisce un mezzo per nascondere il messaggio "nessun altro record", quindi questo dovrebbe essere fatto tramite CSS.
Spero che questo aiuti.
Grazie per la risposta, anche per favore fatemelo sapere se niente altro viene in su. – keune
l'articolo 3 nei miei articoli in sospeso era un errore del mio codice. Avevo un pezzo di codice che costringeva a riportare l'utente in cima all'elenco per l'aggiornamento dei dati, in modo da evitare un altro errore di rendering con il componente dell'elenco di sencha touch. L'errore si manifesta quando i dati che sostituiscono l'elenco sono inferiori a quelli originariamente presenti, causando la mancata comprensione dell'elenco. –
Sei riuscito a trovare una soluzione al tuo primo problema: "Come disattivare l'elemento" Altro "quando non ci sono più record da caricare"? – CrocHunter