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
+
0
-

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
+
0
-

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
+
0
-

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)

josef.sabl
Člen | 153
+
0
-

Že bych byl až tak blbej a tohle nezkusil? :-)
Díky