zpracování formuláře odeslaného Ajaxem

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

Řesím následující problém. Mám stránku, kde je tabulka která má v každém rádku jeden formulář s odesílacím tlačítkem a celý řádek je snippetem. Formuláře se odesílají přes Ajax. Nyní nastává problém se zpracováním. Jelikož se data do forrmuláře plní v Action, a signály se zpracovávají až po Action sekci, vrací to data do snippetu neaktuální (data se modifikují až při zpracování signálu). Při „klasickém“ ajaxovém požadavku si můžu v Action metodu processSignal() zavolat zpracování signálu a vše funguje. Ale při odeslání formuláře to při zavolání metody processSignal() chce zavolat né signál zadaný u submitu formuláře ale signál ve formátu jménoFormuláře-submit, který vyhodí chybu že neexistuje. Existuje nějaký způsob jak zavolat v action handle který form zpracuje?

mach2roman
Člen | 22
+
0
-

Tak problém jsem vyřešil, ale řešení se mě moc nelíbí. Jelikož příjemcem signálu není prezenter, ale componenta formuláře, nedokážu (alespoň já) toto zpracovat v Action. Proto jsem přistoupil k znovu vytvoření formuláře v handlu). Výsledkem je zhruba tento výsledek:

V Action mám toto:

<?php
	public function actionZadavaniKM($spolecnost_vstup, $chs_vstup, $rok = null)
	{

		if ($rok == NULL) {
			$rok = FenixCalendar::getActualYear();
		}

		$this->template->spolecnost_nazev = OsobniAuta::getSpolecnostNaze($spolecnost_vstup, $rok);

		$values = OsobniAuta::zadavaniKMdata($spolecnost_vstup, $chs_vstup, $rok);

		$data = $this->zadavaniKMform($values);
		$this->template->q4 = OsobniAuta::calculate_quartal(4);
		$this->template->q3 = OsobniAuta::calculate_quartal(3);
		$this->template->q2 = OsobniAuta::calculate_quartal(2);
		$this->template->q1 = OsobniAuta::calculate_quartal(1);

		foreach ($data as $form){
			$this->addComponent($form['FORM'], $form['NAME']);
		}

		$this->template->data = $data;
		$this->template->spolecnost_vstup = $spolecnost_vstup;
		$this->template->chs_vstup = $chs_vstup;
		$this->template->rok = $rok;
	}
?>

V handlu mám:

<?php
	public function handleZadavaniKM($button)
	{
		$formvalues = $button->getForm()->getValues();

		$result = OsobniAuta::ulozZadaneKM($formvalues);

		$values = OsobniAuta::zadavaniKMdata($this->template->spolecnost_vstup, $this->template->chs_vstup, $this->template->rok);

		$data = $this->zadavaniKMform($values);
		$signal = $this->getSignal();
		foreach ($data as $form){
			if ($form['NAME'] == $signal[0]) {
				unset($this[$form['NAME']]);
				$this->addComponent($form['FORM'], $form['NAME']);
			}

		}

		$this->template->data = $data;

		$this->invalidateControl($formvalues['SNIPNAME']);


	}
?>

Nejde to udělat nějak kulantněji?