Invalidace formuláře, zachování údajů v inputu – nette 2.0
- Prochy
- Člen | 91
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
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
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
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)