Component or subcomponent name must not be empty string

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Honza Bedrna
Člen | 8
+
0
-

Zdravím, začínám s Nette a nejde mi vytvářet žádný link v Komponentách. V presenteru si normálně vytvořím komponentu:

Presenter:

protected function createComponentFoo(){
	retrun new FooComponent();
}

Componenta:

Class FooComponent extends \Nette\Application\UI\Control {
	public function render(){
		$this->template->setFile(__DIR__.'/foo.latte');
		$this->template>render();
	}
}

Sablona komponenty:

<a n:href=":Homepage:default">home</a>

Sablona view:

{control fooControl}

Vyjimka: Component or subcomponent name must not be empty string.
Co je špatně? Díky moc za rady!

Vojtěch Dobeš
Gold Partner | 1316
+
+1
-

Makro n:href je zkratka pro $control->link() (makro {link ...}). A v komponentách se lze pomocí link() odkazovat jen na signály této komponenty. Pro mezipresenterové odkazování je třeba volat $presenter->link(), pro což slouží makro {plink ...}. Bohužel neexistuje atributová forma.

Tedy:

<a href="{plink :Homepage:default}">home</a>
Aurielle
Člen | 1281
+
0
-

V komponentě je n:href ekvivalentní s makrem {link}, a tedy linkuje v rámci komponenty. Pro linkování z komponenty na jiný presenter/akci je nutno použít makro {plink}.

edit: zase pozdě :P

Editoval gmvasek (20. 3. 2012 18:30)