2010-12-03 7 views
1
function Browse() 
{ 
    this.offset = 10; 
} 

/* 
* @direction is either 'next' or 'prev' 
*/ 
Browse.prototype.loadMore = function(direction) 
{ 
    var _this = this; 

    $.getJSON('/path/to/api?offset=' + this.offset, function(json) 
    { 
     _this.offset = (direction == 'next') ? _this.offset + 10 : _this.offset - 10; 

     if (_this.offset > 10) 
      previousButton.show(); 
     else 
      previousButton.hide(); 
    }); 
} 

Ceci est le code de base. L'utilisateur clique sur un lien qui déclenche loadMore(). Cette fonction extrait les données JSON à partir du offset.Avoir quelques problèmes avec la logique dans mon code de pagination Javascript

Ce décalage changera en fonction de leur 'page' actuelle. La première page aura un décalage de 0. La deuxième page sera 10. Troisième page 20, etc ...

En se déplaçant d'avant en arrière, ce décalage devrait changer en conséquence. Le problème est, ce n'est pas le cas. Je ne vois pas pourquoi ...

Des idées?

+0

Vous utilisez 'new Browse()' et vous accrochez la méthode 'loadMore' de l'instance, oui? – sje397

+0

Oui, tout est appelé correctement. – dave

Répondre

1

C'est parce que l'appel ajax prend du temps à s'exécuter.

Essayez:

//... 
var _this = this; 

$.getJSON('/path/to/api?offset=' + this.offset, function(json) { 
    //... 
}); 
_this.offset = (direction == 'next') ? _this.offset + 10 : _this.offset - 10; 
//... 

Cela utilisera la juste valeur dans votre appel ajax, et changer le prêt offset pour le prochain appel avant le retour d'appel ajax. Vous pouvez ajouter une logique pour ignorer la valeur de retour de l'appel ajax si le décalage a été ajusté entre temps.