Komponenta nenalezena
- tr.
- Člen | 79
Ahoj, používám vlastní komponentu Datagrid. První zobrazení proběhne bezvadně, při volání nějaké akce se ale komponentu nepodaří nalézt. V presenteru mám takovýto kód:
$dataGrid = new DataGrid;
$dataGrid->bindDataTable(new ContactsDatasource());
$this->addComponent($dataGrid, 'dg');
V šabloně mám:
{control dg:paginator}
{control dg:grid}
No a chyba, kterou to píše je:
BadSignalException #403
The signal receiver component 'dg' is not found.
Ale zajímavé je že stacktrace je:
- Application/Presenter.php (206) source ► Presenter→ processSignal ()
- Application/Application.php (156) source ► Presenter→ run ()
- app/bootstrap.php (37) source ► Application→ run ()
- mailer_public/index.php (19) source ► require (arguments ►)
Takže to vůbec nešlo tím prezenterem, takže ji ani znát nemůže.
Nevíte na co jsem zapomněl?
- Panda
- Člen | 569
Nevytváříš náhodou tu komponentu v metodě
render<action>()
? Ta se totiž v životním cyklu presenteru
volá až po zpracování signálů, takže pokud by jsi komponentě poslal
signál, tak by to skončilo zmíněnou chybou.
Řešením by bylo přesunout definici komponenty do metody
action<action>()
, nebo použít továrničku:
Tato funkce se postará o vytvoření komponenty v momentě, kdy je potřeba – například před renderováním nebo zpracováním signálu.
//Doplnění: První! :P
Editoval Panda (27. 8. 2009 13:08)
- Ondřej Brejla
- Člen | 746
Používáš továrničku, nebo jak ji vytváříš?
//EDIT: Sakra, 3 posty během minuty…pěkné…:-D
Editoval Warden (27. 8. 2009 13:07)
- tr.
- Člen | 79
Pando, Jasire, Wardene, děkuji za trojpomoc. Přesunul jsem do prepareNECO() a funguje bezvadne.
Doporucuji pripojit info o zivotnim cyklu komponenty na stranku. https://doc.nette.org/cs/quickstart
Tak tedy dekuji pekne a ahoj.
T.