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 | 1844
 
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).