Posílá se snippet s daty před aktualizací

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

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 | 1834
+
0
-

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

ramal37
Člen | 2
+
0
-

Wow, to bylo rychlý. Díky za pomoc :)