Vnorene snippety s formularom
- pogo
- Člen | 29
Zdravim, mam takuto sablonu:
{snippet}
<!-- nejaky balast -->
{snippet profile}
{control profileForm}
{/snippet}
<!-- nejaky balast -->
{/snippet}
Ta sablona patri nejakemu controlu. Problem vsak nastava, ked chcem celu sablonu invalidovat. Ked v danom controle zavolam
$this->invalidateControl();
tak vrati 2 snippety, ten vrchny, ktory obsahuje vsetko aj s formularom, a
druhy vnoreny, ktory obsahuje vsetko co je v nom, ale formular obsahuje len
tagy <form ...></form>
bez akychkolvek inputov. Vyzera,
ze javascript najprv nahradi vonkajsi snippet a nasledne vnutorni, takze tam
vlozi len prazdny form. Ked vnutorny snippet odstranim, vsetko funguje ako ma.
Formular vykreslujem pomocou
public function createComponentProfileForm()
{
$form = \Smart\Nette\Application\UI\Form;
//...pridavanie inputov
return $form;
}
Vedeli by ste mi poradit, ako spravne pracovat s vnorenymi snippetmi? Dakujem :)
- patriksima
- Člen | 58
pogo napsal(a):
Chcel by som mat moznost invalidovat oba pripady, cely kontrol, tzn. vonkajsi vratane vnutorneho aj s formularom, a vnutorny samostatne.
Tohle nefunguje?
$this->invalidateControl(); // vnější
$this->invalidateControl('profile'); // vnitřní
Z controlu samozřejmě
$this->presenter->invalidateControl();
Editoval patriksima (21. 2. 2013 8:21)
- pogo
- Člen | 29
Ked som v controle a zavolam toto:
$this->invalidateControl();
tak vrati
snippet-actionsTab- (obsahuje vsetky data)
snippet-actionsTab-profile (obsahuje vnutorny, ale bez formularu)
ked zavolam
$this->invalidateControl('profile');
snippet-actionsTab-profile (obsahuje spravne vnutorny aj s formom)
ked volam
$this->presenter->invalidateControl();
tak mi nevrati ani jeden z tychto snippetov.
Co teda potrebujem je, aby mi po zavolani
$this->invalidateControl()
invalidovalo cely template daneho
controlu. Uz som postupne dospel k zaveru, ze ak dam vonkajsiemu meno, tak
pouzivanim mien mi to bude fungovat, ale tomu som sa chcel prave vyhnut, nakolko
mam vcelku zlozitu hierarchiu tried a controlov a chcel som to co najviac
automatizovane:)
- patriksima
- Člen | 58
Chápu to správně, že v šabloně Presenteru máš něco jako
{control actionsTab}
v šabloně komponenty actionTab
{snippet}
<!-- nejaky balast -->
{snippet profile}
{control profileForm}
{/snippet}
<!-- nejaky balast -->
{/snippet}
a v profileForm…?
- patriksima
- Člen | 58
pogo napsal(a):
Ano presne tak,
profileFrorm
ale nema sablonu, ten vytvaram pomocoucreateComponentProfileForm()
ako je v prvom prispevku.
Nevadí. Ale je to komponenta, tedy ji musíš taky zneplatnit.
$this['profileForm']->invalidateControl();
- pogo
- Člen | 29
V tomto pripade mi vypise, ze Form
neimplementuje
invalidateControl()
. Kazdopadne toto by nebolo riesenie, potrebujem
na jednom mieste invalidovat cely control bez ohladu na to, ako sa dany control
vola alebo ake ma v sebe dalsie snippety a controly.
Pri tychto snippetoch
snippet-actionsTab- (obsahuje vsetky data)
snippet-actionsTab-profile (obsahuje vnutorny, ale bez formularu)
ten formular ale v prvom je, ale v druhom nie. Potreboval by som v podstate invalidovat len ten vonkajsi snippet. Nakoniec to ale vyzera, ze pouzijem ten vonkajsi s menom a budem mat problem vyrieseny, aj ked nie tak elegantne, ako som planoval. Kazdopadne dakujem za ochotu a pomoc:)