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,
profileFrormale 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:)