Paginator a ajax překreslení
- kivi8
- Člen | 3
Zdravím, píšu komponentu pro komentáře a mám ajaxově vyřešené hlasování. Dodělal jsem i paginator, kde ovšem nasal problém, že nefunguje znovunačtení „hlavičky“ komentáře na jiných stránkách než první. Zkoumal jsem chování ve firebugu a zjistil jsem, že se posílá snippet s úplně jiným id než je na stránce vykreslený – chová se jako by byl stále na první. Paginator je řešený klasicky (neajaxově) a informace se přenáší jako get takto: ?comments-page=3&do=comments-page
část šablony vypadá zhruba takto – ještě samozřejmě obalená {snippet commentsContainer}
{if $comment['userId'] !== $user->getId()}
<span n:snippet="comment-$id">
{if $comment['voted'] === false}
<span class="votecomment">Hlasovat: <a n:href="votecommentplus! $id" class="ajax">+</a><a n:href="votecommentminus! $id" class="ajax">-</a></span> <span class="commentvotes">{$comment['sign']}</span>
{else}
<span class="votecomment"><a n:href="removevotecomment! $id" class="ajax">Odebrat hlas</a></span> <span class="commentvotes">{$comment['sign']}</span>
{/if}
</span>
{else}
<span class="commentvotes">{$comment['sign']}</span>
{/if}
a v komponentě to obsluhuji takto
public function handleVoteCommentPlus($id){
if(!$this->comment->vote('comment', $id, '1')){
$this->voteError();
}
$this->commentAjax();
}
private function commentAjax(){
if($this->presenter->isAjax()){
$this->redrawControl('commentsContainer');
}
else{
$this->redirect('this');
}
}
Děkuji za případnou pomoc. Opravdu netuším jak to je možné – kde dělám chybu.
- Filip Klimeš
- Nette Blogger | 156
Když odesíláš AJAXem požadavek na server, neuvádíš stránku pro paginator, a ta se nastaví na 1 na místě, kde vytahuješ z modelu data pro stránkování.
Řešením by bylo si commentsPage nastavit v presenteru jako persistentní parametr, poté se bude do odkazu vkládat automaticky.
/**
* @persistent
* @var int
*/
protected $commentsPage;
Editoval FilipKlimeš (11. 1. 2015 20:28)