Paginator a ajax překreslení

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
kivi8
Člen | 3
+
+1
-

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
+
+1
-

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)

kivi8
Člen | 3
+
0
-

Skvěle ! Děkuji moc funguje jak má. Nad tím nastavit persistent jsem také přemýšlel, ale měl jsem to špatně zapsané.