Komponenta nenalezena (tovarnicka)
- Ani
- Člen | 226
Zdravim,
mam problem v BasePresenter mam dve komponenty
v layoutu mam na zobrazeni komponent
a vyhazuje mi to chybu
Component with name ‚insertForm‘ does not exist.
Pritom tu loginForm to normalne zobrazuje, kdyz odstranim ten widget na insertForm. To bude nejaka prkotina, ale uz fakt nevim cim to je.
verze nette Nette Framework 0.9 (revision c82239a released on 2009–08–17)
predem diky
- Ani
- Člen | 226
Diky, asi tak dve vteriny po napsani prispevku sem tam neco prohodil a bylo to tim returnem a predtim sem na to koukal asi hodinu… klasika.
Nicmene co presne dela ten widget? Pripadne kdyz budu mit komponentu, ktera nevraci form, tak se da zobrazit jak? Tohle sem nikde moc zdokumentovany nenasel.
- timbulko
- Člen | 85
Nicmene co presne dela ten widget? Pripadne kdyz budu mit komponentu, ktera nevraci form, tak se da zobrazit jak? Tohle sem nikde moc zdokumentovany nenasel.
widget v podstate iba zavola $this->getComponent(„nazov“)->render(), pripadne renderNieco(parametre). Samotny createComponent moze vracat akukolvek instanciu komponenty (ci uz Form, ale tvoje vlastne komponenty). Cize mozes si napriklad vytvorit triedu MojaKomponenta a v nej mat metodu render() a instanciu tejto triedy potom vracat pomocou createComponent (napriklad cez return new MojaKomponenta;)
- Ani
- Člen | 226
Mno, tak se do toho pomalu dostavam a mel bych jeste jeden dotaz…
Vytvorim si komponentu, ktera vezme tabulku z databaze, vytvori mi formular
na pridani prvku do tabulky.
To mi funguje, az na to, ze nevim jak predat ty komponente promenou s nazvem
tabulky. Jediny co me slo bylo pres persistentni promenou. Jenze ja bych to
potreboval predat jako parametr pri vykreslovani komponenty, abych si mohl na
jedne strance vykreslit tu komponentu pro vic tabulek.
- jasir
- Člen | 746
Okej, možná jsem tě zmátl. Vycházel jsem z tvé věty: „Vytvorim si komponentu, ktera vezme tabulku z databaze, vytvori mi formular na pridani prvku do tabulky“.
Svým příspěvkem jsem myslel to, že máš tedy vlastní komponentu
(nikoliv AppForm) který obsahuje mimojiné AppForm. Pojmenoval jsem jí tam
TableFormControl.
Taková komponenta pak sama může obsahovat AppForm,
továrničky atd.
A současně může mít tebou definovanou metodu render($table).
Ty ale zřejmě jako komponentu máš instanci AppForm, kterou navíc chceš vytvářet na základě nějakého parametru. AppForm je ale definovaný jen jednou, a v průběhu render ho již měnit nemůžeš, aby jsi ji vykreslil vícekrát s různými parametry.
Editoval jasir (5. 9. 2009 11:15)
- Ani
- Člen | 226
Tak uz jsem to nejak rozchodil, ale mel bych jeste par dotazu.
Takhle vypada ta komponenta
a pak si v presenteru, kde potrebuju tu komponentu vytvorim
kdyz potrebuju dva ty formulare, tak vytvorim dalsi instanci IsertFormControl a pridam si dalsi komponentu.
a v sablone to zavolam jako
{control insertForm}
Zajimalo by me jestli je to z pohledu zkusenejsiho cloveka spravne reseni, nebo jestli se tam dopoustim nejakych chyb.
A pak mam problem, kdyz sem v komponente udelal public render ($table) a v rablone volal {control insertForm:jmenotabulky}, tak to nefungovalo.
- jasir
- Člen | 746
- nemusíš volat
this->createTemplate()
, rovnou přistupuj přes$this->template
- i v komponentě si můžeš šahat na podkomponenty pomocí $this[‚componentName‘]
- tím ‚culomn‘ asi myslíš ‚column‘
Proč ti nefungoval {control insertForm::table} – tady se omlouvám, {widget} funguje malinko jinak
{control component}
→$control->getWidget('component')->render()
{control component:table} -> `$control->getWidget('component')->renderTable()
{control component:table users} -> `$control->getWidget('component')->renderTable('users')
Čili v tvém případě mělo být:
{control tableform $table}
Editoval jasir (6. 9. 2009 20:14)