Jméno komponenty nesmí být prázdný řetězec

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

Rád bych se zeptal na jednu věc ohledně komponent. Měl jsem třídu komponenty i se šablonou, tedy MyControl.php a MyControl.latte. Ve třídě jsem nastavil pole, které se skládalo z asociativních indexů ve formátu :Module:Presenter: a na nich byly uloženy názvy odkazů. Zběžně to vypadalo nějak takto:

MyControl.php

class MyControl extends Nette\Application\UI\Control
{
	private $sections = array();

	public function render()
	{
		$this->template->setFile(__DIR__ . '/MyControl.latte');
		$this->template->sections = $this->sections;
		$this->template->render();
	}

	public function setSection($link, $name)
	{
		$this->sections[$link] = $name;
	}
}

MyControl.latte

<ul>
	<li n:foreach="$sections as $link => $name"><a n:href="$link">{$name}</a></li>
</ul>

Ať už jsem dělal cokoli, pořád dokola se mi objevovala hláška: Component or subcomponent name must not be empty string.

Zlepšilo se to teprve až poté, co jsem šablonu kompoennty změnil na:

<ul>
	<li n:foreach="$sections as $link => $name"><a href="{plink $link}">{$name}</a></li>
</ul>

Tedy místo n:href jsem použil plink. Mohl by mi prosím někdo vysvětlit, co bylo špatně?

mkoubik
Člen | 728
+
0
-

Makro n:href=".." je vlastně <a href="{link ...}">, neboli $control->link(), takže generuje odkaz na komponentu. Odkaz na presenter se generuje pomocí $presenter->link(), nebo {plink ...}, atributové makro pro to neexistuje.
V šabloně presenteru to funguje, protože tam $presenter === $control.

Editoval mkoubik (2. 6. 2014 22:00)