AJAX požadavek vrátí původní formulář
- sejmor
- Člen | 63
Poraďte prosím … bude to nějaká blbost nebo moje zásadní nepochopení a čumím do toho asi moc dlouho a už to nevidím. Zjednodušil jsem to na konkrétní příklad. Mám formulář, který má dvě varianty. Liší se jenom tím jestli odesílací tlačítko je Objednat nebo Stornovat. Tento stav zjistím pomocí členské proměnné $objednano v presenteru. V šabloně si tuto proměnou a formulář zobrazím.
Presenter:
public $objednano=0;
public function renderObjednavka()
{
$this->template->objednano=$this->objednano;
}
protected function createComponentObjednavka() {
$form = new Form();
if ($this->objednano) {
$form->addSubmit('send', 'Stornovat')
->setAttribute('class', 'stornovat');
$form->onSuccess[] = callback($this, 'Storno');
} else {
$form->addSubmit('send', 'Objednat')
->setAttribute('class', 'objednat');
$form->onSuccess[] = callback($this, 'Objednavka');
}
return $form;
}
public function Objednavka(\Nette\Forms\Form $form) {
if ($this->presenter->isAjax()) {
$this->objednano=1;
$this->template->objednano= $this->objednano;
$this->invalidateControl('formular');
/*$this->getPresenter()->flashMessage($zprava, 'success');
$this->redirect('this');*/
}
}
public function Storno(\Nette\Forms\Form $form) {
if ($this->presenter->isAjax()) {
$this->objednano=0;
$this->template->objednano= $this->objednano;
$this->invalidateControl('formular');
/*$this->getPresenter()->flashMessage($zprava, 'success');
$this->redirect('this');*/
}
}
Šablona:
{block content}
{snippet formular}
{$objednano}
{form objednavka class=>ajax}
{input send}
{/form}
{/snippet}
{/block}
Pokud formulář odešlu přes AJAX tak proměnná ($objednano) ve snippetu se změní a očekávám že se mi změní i formulář. To se mi neděje, protože se mi v JSON vrátí ten původní formulář.
Jak přinutit aby se mi ta komponenta s formulářem aktualizovala a v JSON mi přišla druhá varianta formuláře?
Editoval sejmor (26. 8. 2013 13:50)
- David Matějka
- Moderator | 6445
preci nemuzes cekat, ze pri zpracovani formulare muzes zmenit to, jak se ma vytvorit :) (createComponentObjednavka() muselo nutne probehnout pred Objednavka())
- sejmor
- Člen | 63
matej21 napsal(a):
preci nemuzes cekat, ze pri zpracovani formulare muzes zmenit to, jak se ma vytvorit :) (createComponentObjednavka() muselo nutne probehnout pred Objednavka())
Že bude tady zakopanej pes jsem tak nějak tušil. Ale teď jak to vyřešit? Mohl bych každou variantu formuláře udělat jako samostatnou komponentu a v šabloně vybrat kterou variantu zobrazím. Jak to ale udělat když to nechci dělat v šabloně?