Invalidace formuláře, zachování údajů v inputu – nette 2.0

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

Zdravim,
chci se zeptat, jak provádíte invalidaci formuláře, když chcete zachovat položky, které jsou napsány. Takže když mám v inputu text: abcd, provedu ajaxovou událost na nějaký select, následně znovuvykrselim celý formulář, tak se mi vymažou hodnoty inputu. Momentálně to dělám, takže posílám hodnotu inputu a následně ji v handleru opět dosadim do inputu a potom vykreslim. Ale jak to udělat, když tam mám třeba 20 inputů, jak zachovat jejich hodnoty?

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Co takhle nepřekreslit celý formulář, ale ve snippetu si nechat třeba jen tu část, která je závislá na přepnutém selectu?

Takové řešení vyžaduje manuální renderování. Pokud teď pro formulář nemáš šablonu, bylo by třeba ji zavést.

Editoval vojtech.dobes (30. 5. 2012 13:38)

Prochy
Člen | 91
+
0
-

To mě samozřejmě napadlo, ale nejspíš dělám něco špatně, jelikož mi to hází error.
Latte šablona:

{form visitForm}
<table>
...
{snippet visitSelectPayment}
  <tr>
    <th>{label exam_to_therapy/}</th>
    <td colspan='3'>{input exam_to_therapy}</td>
  </tr>
{/snippet}
...
</table>
{/form}

\--
A hlásí mi to chybu:

Undefined variable: _form
<th><?php if ($_label = $_form["exam_to_therapy"]->getLabel()) echo $_label->addAttributes(array()) ?></th>

Zkusil jsem to i napřímo ručně pomocí:

{$form['exam_to_therapy']->getLabel()}

A tady to hlásí, že to nezná $form. Ale počítám s tím, že takhle se to nemá dělat.

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Oh, pravda, sám jsem to nikdy nezkoušel. To jsem nedomyslel, snippety jsou de facto bloky, a při ajaxovém volání jsou skutečně volány jen ty samotné snippety, jejich okolí ne, tudíž není k dispozici proměnná $_form (která se interně vytváří v makru {form}). Řešením je si buď v daném Ajaxovém požadavku do šablony, kde ten formulář je, dát ručně $this->template->_form = $this['visitForm'], a nebo počkat, až někdo přijde s lepším řešením :)

Editoval vojtech.dobes (30. 5. 2012 14:05)