vstupní a výstupní hodnoty události onClick[]

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

Ahoj, je nějaká šance získat v události onClick přístup přímo k objektu formuláře a také k odeslaným hodnotám formuláře? Tak jako se tyto hodnoty předávají do události onSuccess? (function ObjednavkaFormSuccess ($form, $values) {...zpracovani formulare...})

Mám generované dynamické submit tlačítko v kontejneru $fieldsObjpol->addSubmit('deleteobjpol', 'Smazat')->onClick[] = [$this, 'DeleteObjPol']; a potřeboval bych se v události DeleteObjPol dostat k $form a k $values ale tak, abych mohl pracovat přímo s instancí toho objektu i těch odeslaných hodnot.
Potřebuji při mazání odstranit komponentu a položku z $values dle jejího ID, aby se následně neukládala do dababáze (v onSuccess totiž při mazání nejprve smažu položku a pak ukládám celý formulář, aby se při překreslení formulářa neztratily změny v jiných polích). Komponentu mažu, aby se neobjevila ve formuláři po ajax požadavku a překreslení pomocí ->redrawControl

Událost volaná po stisku tlačítka smazat položku – zde se nedostanu k $form a $values = nepoužitelné?

<?php
function DeleteObjPol ($button)
{
	//$form = $button->getForm();
	//Debugger::barDump($button);
	//Debugger::barDump($button->form->getValues()->objpol[2]);
	//Debugger::barDump($button->getParent()->name);

	$id_objpol = $button->getParent()->name;

	if ($this->dataManager->deleteObjpol($id_objpol)):
		unset($button->form->getValues()->objpol[$id_objpol]);	// ->getValues() vrati pouze kopii hodnot, nejedna se o primy pristup k odeslanym hodnotam!!!
		$this->flashMessage('Položka byla smazána', 'success');
	else:
		$this->flashMessage('Položka nenalezena', 'error');
	endif;
}
?>

Takto provádím mazání hodnot z $values a komponenty v události onSuccess – a funguje to jak potřebuji – ale přijde mi to trochu divoký a rád bych měl ten kód spíš v události na události tlačítku DeleteObjPol. Jenže tam se nedostanu k $form a $values.

<?php
function ObjednavkaFormSuccess ($form, $values)
{
if ($form->isSubmitted()->name == 'deleteobjpol' and (int) $form->isSubmitted()->getParent()->name > 0):
	$id_objpol = $form->isSubmitted()->getParent()->name;
	if ($this->dataManager->deleteObjpol($id_objpol)):
		unset($values->objpol[$id_objpol]);
		$form['objpol']->removeComponent($form['objpol'][$id_objpol]);
		$this->flashMessage('Položka byla smazána', 'success');
	else:
		$this->flashMessage('Položka nenalezena', 'error');
	endif;
endif;
...
?>

Editoval RadaR (19. 12. 2016 22:14)

RadaR
Člen | 46
+
0
-

Vypadá to, že stačí smazat komponentu a do $values se to pak už nedostane. K $form se v onClick[] dostanu a komponentu odstraním. Zdá se, že to funguje:

<?php
/**
 * Událost po kliknutí na tlačítko smazání položky objednávky
 *
 * @param object $button komponenta tlačítka formuláře
 */
function DeleteObjPol ($button)
{
	$form = $button->getForm();
	$id_objpol = $button->getParent()->name;

	if ($this->dataManager->deleteObjpol($id_objpol)):
		$form['objpol']->removeComponent($form['objpol'][$id_objpol]);
		$this->flashMessage('Položka byla smazána', 'success');
	else:
		$this->flashMessage('Položka nenalezena', 'error');
	endif;
}
?>

Editoval RadaR (19. 12. 2016 23:59)