Posílá se snippet s daty před aktualizací
- ramal37
- Člen | 2
Ahoj,
můj první experiment s Ajaxem funguje tak napůl. Používám PHP5.3, Nette 2.0.7.
Mám komponentu, která zobrazuje produkt eshopu. Po kliknutí na odkaz v této komponentě by se měla snížit cena produktu. Po kliknutí se požadavek na sever odešle, data v databázi změní, ale vrátí se snippet s daty před aktualizací. Výsledkem je, že při opakovaném klikání se překreslují data o jedno kliknutí starší.
šablona komponenty zobrazující produkt
{snippet}
<div id="product">
<h1>{$product->name}</h1>
<img src="images/products/{$product->picture}" border=0 />
<div id="price">{$product->price}</div>
<a n:href="reducePrice! $product->getId()" class="contr ajax">snížit cenu</a>
</div>
{/snippet}
metoda pro zpracování signálu v komponentě
public function handleReducePrice($productId)
{
$this->productRepository->reducePrice($productId);
if (!$this->presenter->isAjax()) {
$this->presenter->redirect('this');
} else {
$this->invalidateControl();
}
}
továrnička na komponentu v presenteru
public function createComponentDisplayProduct ()
{
return new DisplayProductControl($this->productRepository->find($this->productId), $this->productRepository);
}
Aktuální data produktu loaduju v továrničce na komponentu, proč se odesílá snippet se starými daty? Moc děkuju za radu!
Editoval ramal37 (29. 12. 2012 12:02)
- hrach
- Člen | 1838
No protoze jestli zmenu ceny provadis v signalu na komponente, tak uz mas nacteny data, protoze se vola metoda na objektu, ktery byl vytvoren tovarnickou…
Resenim je napr. v tovarnicce predavat callback na data, a callback volat az tehdy, kdyz budes data potrebovat, tedy napr. pri renderu (tzn. po snizeni ceny).