Nefunkčni invalidateControl z componenty

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

Zdravím, napsal jsem si komponentu na jedno hodnocení a vše bylo v pořádku do té doby, než jsem jí začal volat z latte.
Kde je problém…

V BasePresenteru je metoda:

    public function createComponentVoteProduct()
    {
        $vote = new \ProductVoteControl();
        $vote->setUser($this->user);
        $vote->setProductModel($this->productModel);
        $vote->setProductID(18);
        $vote->setConfig($this->config);

        return $vote;
    }

V následné layoutě si pak zavolám

{control voteProduct}

A všechno funguje jak má…

Nicméně jsme chtěl ID produktu předávat jako parametr z latte konstrukce na control, což je také v pořádku

{control voteProduct, 18}
// V renderu componenty jí pridelim

    public function render($productID)
    {
	$this->productID = $productID;
    }

Vše v pořádku a komponenta se vytvoří. Následné handle na hlasování také funguje, ale již nefungují invalidateControl.
Mám handle:

    public function handleVote($type, $vote, $productID)
    {
	// Zpracuje nejaky data a pokracuj
	$this->invalidateControl('votes');
	$this->invalidateControl('meVotes');
	$this->invalidateControl('flashMessages');
    }

V tuto chvíli mi to hodilo 500 a invalidateControl jsem tedy zavolal přes getPresenter().
Hlasování proběhlo a vrátil se JSON se snippety. Tedy se snipetem.

Aplikace mi vrátila pouze snippet „flashMessages“ a ostatní vůbec.
Za boha nevím, kde je chyba.

Díky moc

Michalek
Člen | 212
+
0
-

Zřejmě v šabloně? Pokud je snippet až uvnitř control. To prostě nefunguje, už dlouho. :(

https://forum.nette.org/…e-komponenty

David Matějka
Moderator | 6445
+
0
-

mi to hodilo 500

mi fakt nic nerekne, hod nekam vystup z ladenky

iwory
Člen | 147
+
0
-

Michalek napsal(a):

Zřejmě v šabloně? Pokud je snippet až uvnitř control. To prostě nefunguje, už dlouho. :(

https://forum.nette.org/…e-komponenty

Aha, no tak to není moc dobré, budu muset najít jiné řešení :-(
Díky

iwory
Člen | 147
+
0
-

matej21 napsal(a):

mi to hodilo 500

mi fakt nic nerekne, hod nekam vystup z ladenky

Pardón, nešlo o řešení toho pětikila ale o invalidaci těch snippetu. 500 jsem opravil hned.
Akorát musím vyřešit ty snippety.

David Matějka
Moderator | 6445
+
0
-

no jestli si to vyresil tim zavolanim pres presenter, tak se nedivim, ze nefunguje ta invalidace – musis to volat nad komponentou

jinak, jestli mas na strance vic tech hlasovacich komponent, pouzij radeji multiplier nez posilani parametru do render metody – muze se to prave mlatit s tim ajaxem

iwory
Člen | 147
+
0
-

matej21 napsal(a):

no jestli si to vyresil tim zavolanim pres presenter, tak se nedivim, ze nefunguje ta invalidace – musis to volat nad komponentou

jinak, jestli mas na strance vic tech hlasovacich komponent, pouzij radeji multiplier nez posilani parametru do render metody – muze se to prave mlatit s tim ajaxem

jj, invalidate volam přes presenter – takže

$this->getPresenter()->invalidateControl('votes');

Nicméně tam mám tři controly:

if($this->getPresenter()->isAjax())
        {
            $this->getPresenter()->invalidateControl('votes');
            $this->getPresenter()->invalidateControl('meVotes');
            $this->getPresenter()->invalidateControl('flashMessages');
        }
        else
            $this->getPresenter()->redirect('this');

Z tech třech se mi vratí pouze ten treti – tedy „flashMessages“ a né všechny. Takze se neinvaliduji vsechny data na strance :-/

Editoval iwory (10. 11. 2013 23:03)

David Matějka
Moderator | 6445
+
0
-

no ale snippety votes a meVotes nemas v sablone presenteru, ale v sablone komponenty, ne? takze to nemuzes invalidovat pres presenter

iwory
Člen | 147
+
0
-

To chápu, nicméně když metodu nevolám skrze presenter, tak mi hodí 500 že mu nepředávám paramater do funkce render().

Nevím ale jak bych mu jí měl předat když volám handle.

David Matějka
Moderator | 6445
+
0
-

a to se vracime k tomu, co jsem psal:
muzes jsem hodit tu 500 stranku?

a pouzij radeji multiplier

Editoval matej21 (11. 11. 2013 11:57)

iwory
Člen | 147
+
0
-

matej21 napsal(a):

a to se vracime k tomu, co jsem psal:
muzes jsem hodit tu 500 stranku?

a pouzij radeji multiplier

Tak jsem použil multiplier a již všechno jede jak má…
Omlouvám se a příště poslechnu hned… :-)

Díky za help :-)