špatná invalidace snippetů při handle

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

Zdravím, chtěl bych pomoci s následujícím:

public function renderDefault($order = NULL) {
    $paginator = $this['paginator']->getPaginator();
    $paginator->itemCount = $order != 'rand' ? count($this->projectService->get(1)) : 6;
    $paginator->itemsPerPage = 6;

    $this->template->projects = $this->projectService->getOrder($paginator, 1, $order);
    if ($this->isAjax())
        $this->invalidateControl('projects');

    $this->template->tags = $this->tagsService->get();
}

v metodě renderDefault mám toto:

a pak mám handle na změnu obsahu:

public function handleTag( $tag ) {
    $paginator = $this['paginator']->getPaginator();
    $paginator->itemCount = count($this->projectService->get(1)->where('project_has_tag:tag_id', $tag));
    $paginator->itemsPerPage = 6;

    $this->template->projects = $this->projectService->getOrder($paginator, 1)->where('project_has_tag:tag_id', $tag);
    $this->invalidateControl('projects');
}

Bohužel se mi stále v invalidaci předávají data z renderDefault namísto z handlu.

//moje otázka tedy směřuje na to, jak to udělat, aby se buď neprovedl potom renderDefault podle životního cyklu, nebo aby mi nepřepsal snippety.

Editoval Jack06 (13. 10. 2012 14:37)

Ot@s
Backer | 476
+
0
-
  1. invalidateControl() prováděj před renderováním (tj. v signálu nebo v příslušné action presenteru)
  2. handleTag() (obecně signály) je vhodné ukončit přesměrováním (třeba v presenteru typicky na $this->redirect('this'))
Jack06
Člen | 168
+
0
-

Nemohu to přesměrovat. Pokud bych tam dal redirect, tak mi je k ničemu, že tam mám snippety. Mám to ajaxově načítané.

studna
Člen | 181
+
0
-

Můžeš si v renderDefault přidat podmínku !$this->isAjax(), pod kterou bude načítání dat do šablony.

Takto si sice v handlu předáš data, ale pak si je v renderDefault přepíšeš.

Editoval studna (14. 10. 2012 11:31)

Ot@s
Backer | 476
+
0
-

Jack06 napsal(a):

Nemohu to přesměrovat. Pokud bych tam dal redirect, tak mi je k ničemu, že tam mám snippety. Mám to ajaxově načítané.

Ano, „pochopils“ to správně – ten kód je třeba přepsat tak, aby reflektoval životní cyklus frameworku. Pak budeš mít aplikaci, která ti bude fungovat „tak i tak“ bez nějakých speciálních kliček. Problém je v tom, že s „nepřehledným“ kódem ti velice nikdo moc neporadí (alespoň tak to vnímám já).