Link v komponente – Component is not attached to presenter
- Phalanx
- Člen | 310
Chci Vás poprosit o pomoc. Mám komponentu, ve které volám link, ale
hází mi chybu
Component '' is not attached to 'Nette\Application\UI\Presenter'
.
<?php
interface ISimpleControlFactory
{
/** @return Simple */
function create();
}
class Simple extends Control
{
public function setVariable($type)
{
$link = $this->link('click!'); // tento řádek vyhazuje chybu
// ...
}
}
?>
Našel jsem více materiálů k této chybě, ale za boha se nemůžu dopracovat ke správnému řešení.
zkoušel jsem attached
https://forum.nette.org/…-attached-to
četl si v dokumentaci
https://pla.nette.org/…nty-k-rodici
- Ondřej Kubíček
- Člen | 494
a čeho chceš vlastně dosáhnout, proč potřebuješ získat link v komponentě?
přes to attached by to jít mělo, musíš tu tvoji metodu zavolat až v té metodě
protected function attached($presenter)
{
parent::attached($presenter);
$this->setVariable($type);
}
- Phalanx
- Člen | 310
@OndřejKubíček Díky moc. Zjistil jsem, že to tak dělat nemůžu. Vytvořil jsem formulář v presenteru a snažil se mu akci nastavovat až v komponentě (+ pak ho v té komponentě vykreslit). Dělám to tak z důvodu, že komponenta bude univerzální, aby se dala propojit s mnoha formuláři.
Vyřešil jsem to tak, že vytvořím jen obálku formuláře v presenteru, kde si vytvořím inputy (addText, addSelect) a celý formulář si už přímo vytvořím v komponentě – standartně createComponentForm() a pak do něj jen nasázím prvky kopírováním.
<?php
$formTmp = $this->getFilterFormOptions();
foreach($formTmp->getComponents() as $option) {
$option->setParent(null);
$form->addComponent($option, $option->name);
}
?>
Pokud by někdo znal lepší řešení, budu rád.