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
+
0
-

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
+
0
-
  1. 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.
  2. Pro aktualizaci formuláře na straně klienta použij snippet, ten při AJAX požadavku invaliduj.
  3. 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)