Komponenta, která při vykreslení používá další komponenty
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- josef.sabl
- Člen | 153
Jak vytvořit komponentu, která ke svému vykreslení bude využívat služeb dalších, vnořených komponent? Které jsou mimochodem použity v aplikaci i samostatně.
Mám presenter:
class TestPresenter extends BasePresenter
{
public function createComponentBar()
{
return new BarControl();
}
}
A k němu šablonu:
{control bar 'bar'}
Komponenta Bar vypadá takto:
class BarControl extends \Nette\Application\UI\Control
{
public function render($bar)
{
$template = $this->template;
$template->setFile(__DIR__ . '/BarControl.latte');
$template->bar = $bar;
$template->render();
}
}
A má takovouto šablonu:
Bar: {$bar}
{control foo 'foo'}
Vykresluje tedy komponentu Foo, jejíž podoba není důležitá.
Nicméně mi to hlásí
Component with name 'foo' does not exist.
Celkem logicky, protože
ji to nemá odkud vzít. Jak ji mám přidat? Nějak ji nadefinovat
v komponentě Bar? Jak?
Díky za pomoc.
- leninzprahy
- Člen | 150
jednoduše, stejně jako v presenteru :)
class BarControl extends \Nette\Application\UI\Control
{
public function render($bar)
{
$template = $this->template;
$template->setFile(__DIR__ . '/BarControl.latte');
$template->bar = $bar;
$template->render();
}
public function createComponentFoo()
{
return new FooControl();
}
}
- Marek Šneberger
- Člen | 130
normálně dáš to Bar komponenty další továrničku:
protected function createComponentFoo()
{
return new FooControl();
}
// Pozdě :-)
Editoval Marek Šneberger (20. 11. 2012 17:46)