Při použití FormContainer a AJAXu se nepropagují data do getValues() správně…?

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

Mám formulář, který používá FormContainer pro sdružení několika (uživatelsky nastavitelné číslo) polí. Tento formulář odesílám AJAXem, standardně přes nette plužíny tady v extras.

Jasně je vidět, že se odesílají správná data: http://dl.dropbox.com/…desilase.png

Pokud však udělám toto:

public function formSubmitted(Form $form)
	{
		dump($form->getValues());die;

Tak dostanu pochroumaná data: http://dl.dropbox.com/…vypisese.png

Když nejdu přes formulář, ale vypíšu si co je v $_POST, tak vidím, že tam je vše správně.

public function formSubmitted(Form $form)
	{
		dump($_POST);die;

Vyhodí správně strukturu dat jak je odesílaná. Pokud formulář neodešlu AJAXem ale normálně, tak vše funguje taky správně. Hm. WTF?

norbe
Backer | 405
+
0
-

A neděláš chybu v sestavování toho formuláře? Hoď sem kdyžtak kód továrničky… Osobně si myslím, že při opětovném sestavení formuláře nepřidáš do formcontainer všechna pole podle toho uživatelsky nastavitelného čísla…

honzajavorek
Člen | 57
+
0
-

Počet těch polí jde z GETu. Proč by to bez AJAXu fungovalo a s ním ne?

	const DEFAULT_SOURCES_NUMBER = 4;

	protected function getSourcesNumber()
	{
		$n = (int)$this->getParam('sources', self::DEFAULT_SOURCES_NUMBER);
		return ($n < 1)? 1 : $n;
	}

	protected function createComponentForm()
	{
		$form = new AppForm($this, 'form');
		$form->getElementPrototype()->class('ajax');

		$sources = $form->addContainer('sources');
		for ($i = 0; $i < $this->getSourcesNumber(); $i++) {
			$sources->addTextArea($i, 'Zdroj ' . ($i + 1) . ':', 20, 10);
		}

		...

		return $form;

	}
norbe
Backer | 405
+
0
-

Když na to teď tak koukám, řekl bych že Ti nebude fungovat správně getSourcesNumber. Jelikož jak GET parametr, tak POST se jmenuje sources. A s AJAXem to nefunguje nejspíš proto, že getParam bude mít pro něj asi jinak nastavené priority, odkud se hodnota bere (odhaduju).

Řešením by tedy mohlo být přejmenovat GET parametr sources.

honzajavorek
Člen | 57
+
0
-

Jasně! To mě vůbec nenapadlo, samozřejmě to bylo tím :) Díky moc!