AJAX požadavek vrátí původní formulář

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

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

preci nemuzes cekat, ze pri zpracovani formulare muzes zmenit to, jak se ma vytvorit :) (createComponentObjednavka() muselo nutne probehnout pred Objednavka())

sejmor
Člen | 63
+
0
-

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ě?