Editace formulaře na zálkadě AJAX požadavku
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- jchatrny
- Člen | 1
Dobrý den,
dělám aplikaci, kde potřebuji na základě AJAXového požadavku vygenerovat formulář. Zatím to dělám tak, že formulář nadefinuji v template. V presenteru formulář vytvořím a všem jeho prvkům přidám atribut display:hidden;. Řeším problém, jak v metodě vyvolané AJAX požadavkem měnit elementy formuláře, zda je možné měnit prvky formuláře přímo v této metodě, nebo zda to musím upravovat až na straně klienta pomocí JS (nastavení zobrazení, obsah selectu atd.). Popřípadě zda existuje nějáký efektivnější způsob jak tuto situaci řešit.
Template:
{form odesliVydejForm}
<table id='odesli'>
<thead>
<tr>
...
<th>Počet kusů</th>
</tr>
</thead>
<tbody>
<tr class="required">
...
<td id="kusu">{input kusu}</td>
</tr>
</tbody>
</table>
{/form}
Presenter (metoda handleAjaxEvent, na základě filtru získá data z databáze a měla by je doplnit do formuláře):
public function createComponentOdesliVydejForm()
{
$form_odesli = new Form();
...
$form_odesli->addText('kusu')
->setAttribute('style', 'display:none;');
return $form_odesli;
}
public function handleAjaxEvent($name)
{
...
$this->getComponent("odesliVydejForm")->offsetGet('kusu')->setValue($data)
->setAttribute('style', ''); // neco takoveho
...
}
- zelenomodrypes
- Člen | 11
- Proč nepředávat AJAX data, která modifikují formulář, přímo přes
parametr metody
createComponentOdesliVydejForm
? Úprava formuláře takto bokem přináší určité problémy při odeslání formuláře. - Pro aktualizaci formuláře na straně klienta použij snippet, ten při AJAX požadavku invaliduj.
- Po odeslání takto vygenerovaného formuláře musíš mít stále k dispozici data, která ho modifikují, tj. buď si je uložíš do session, nebo je předáš/uchováš jiným způsobem. Pokud se ti po odeslání formuláře vygeneruje na serveru jiný formulář, nedostaneš z něj zamýšlené hodnoty.
Editoval zelenomodrypes (9. 12. 2013 9:16)