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

- fary
- Člen | 155
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
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)