AJAX změna struktůry formuláře
- ODIS
- Člen | 33
Zdravím, používám Nette 2.0.12 a řeším následující problém:
potřebuji při změně hodnoty v selectboxu vyměnit jeden formulář, za druhý. To není až tak složité, až na to, že po výměně těch formulářů se stále volá akce (na onSuccess) toho prvního formuláře – resp. do callbacku se posílají data z prvního formuláře.
Jak tedy pomocí AJAXU vyměnit jeden formulář za druhý včetně jeho akce?
Má implementace viz následující kód:
presenter
<?php
protected function createComponentEditItemForm() {
$form = new Form;
// pridani ruznych inputu
$form->addSelect('section_id', 'Sekce příspěvku', $this->itemSections->fetchPairs('id', 'name'))
->addRule(Form::FILLED, 'Prosím zvolte Sekci.')
->setPrompt('Sekce příspěvků')
// zde se pres ajax provede volani nize uvedeneho handleru
->getControlPrototype()->onChange('changeSection(this.value)');
// definovani akce - tohle se vola vzdy - jak vymenit?
$form->onSuccess[] = callback($this, 'editItemFormSubmitted');
return $form;
}
public function handleChangeEditItemContext($sectionId) {
if ($this->isAjax()) {
// vytvoreni noveho formulare
$sectionForm = new SectionsForm($sectionId);
// nove definovani akce
$sectionForm->onSuccess[] = callback($this, 'editItemFormSubmitted');
// nahrazeni puvodniho formulare
$this['editItemForm'] = $sectionForm;
$this->invalidateControl('editForm');
}
}
?>
Editoval ODIS (14. 2. 2014 10:51)
- mildhouse
- Člen | 27
Ahoj,
cokoli, co v handle uděláš, je po odeslání formuláře zapomenuto. Takže buď jak píšeš – uložit do SESSION, nebo já používám hodnoty z odeslaného formuláře :
$this->section_id = $this->getRequest()->post['section_id'];
a $this->section_id pak použiju stejně, jako když to vytáhnu ze SESSION, akorát nemusim řešit expiraci SESSION.
Ale jestli je to správné řešení, to netušim.