Nefunkčni invalidateControl z componenty
- iwory
- Člen | 147
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
Zřejmě v šabloně? Pokud je snippet až uvnitř control. To prostě nefunguje, už dlouho. :(
- iwory
- Člen | 147
Michalek napsal(a):
Zřejmě v šabloně? Pokud je snippet až uvnitř control. To prostě nefunguje, už dlouho. :(
Aha, no tak to není moc dobré, budu muset najít jiné řešení :-(
Díky
- David Matějka
- Moderator | 6445
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
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
no ale snippety votes a meVotes nemas v sablone presenteru, ale v sablone komponenty, ne? takze to nemuzes invalidovat pres presenter
- David Matějka
- Moderator | 6445
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)