Komponenta – použití ostatních render v komponentě

Fires
Člen | 97
+
0
-

Zdravím, přečetl jsem co se dalo, skouknul i nějaké videa jak používat komponenty ale furt v tom mam bordel :(

Chtěl jsem aplikaci rozdělit do komponent aby byla přehlednější. Potřeboval bych použít jiný render ve stejné komponentě. Příklad za vše:

class YkyloControlComponent extends \Nette\Application\UI\Control{

    private $ykyloService;

    public function __construct(\Projectglobe\Ykylo\YkyloService $ykyloService) {
        $this->ykyloService = $ykyloService;
    }

    public function renderMap($ident){
        $controlMap = $this->ykyloService->getControlMapByIdent($ident);
        $this->template->controlMap = $controlMap;
        $this->template->render(__DIR__.'/templates/controlMap.latte');
    }

    public function renderIcon($thing){
        $this->template->controlThing = $thing;
        $this->template->render(__DIR__.'/templates/thing_'.$thing->id_type.'.latte');
    }
{* Latte template *}

{block content}
{$controlMap->map_code|noescape}
<!-- DRAGGABLE ICON -->
{foreach $controlMap->linkedControls as $mapIcon}
    {control this:icon $mapIcon}
{/foreach}
<!-- DRAGGABLE ICON -->

Vyzkoušel jsem snad všechny možnosti jak zavolat {control this:icon $mapIcon} ve stejné komponentě ale nepřišel jsem na to jak :( nebo používám komponenty uplně špatně ?

Martk
Člen | 661
+
0
-

Neporadím ti konkrétně s tím co potřebuješ, nevím, jestli to jde. Můžeš si udělat znovupoužitelné komponenty Map a Icon a ty injectovat do komponenty YKyloControl a pak jen volat:

{block content}
<!-- DRAGGABLE ICON -->
{foreach $controlMap->linkedControls as $mapIcon}
    {control icon $mapIcon}
{/foreach}
Fires
Člen | 97
+
0
-

Tak studoval jsem ještě dál. A řekl bych že komponenty prostě používám blbě. Správně by se měli vytvořit 2. komponenty ( ControlMap, ControlIcon) a poté využívat ControlMap jako kontejner pro ControlIcon.

Oli
Člen | 1215
+
0
-

Přesně tak ;-) ale je to to samé co napsal @Martk. To jaký se použije render si řekne ten prvek, který komponentu volá a ty komponenty můžeš do sebe v pohodě zanořovat…