Formulář – vložení tlačítek do divu – nelze volat getControl
- bluray
- Člen | 178
Dobrý den, mám třídu která mi sdružuje tlačítka formuláře a chci je
všechny vykreslit do div. narazil jsem na problém že nemůžu volat
getControl(). hlásí to Component '' is not attached to
‚Nette\Forms\Form‘.
takto vypadá kod:
class ButtonGroup extends BaseControl{
/** @var MyButton[] */
private $buttons;
public function __construct() {
parent::__construct(null);
}
/**
* @param MyButton[] $buttons
* @return ButtonGroup
*/
public function setButtons($buttons) {
$this->buttons = $buttons;
return $this;
}
/**
* @param MyButton $button
* @return ButtonGroup
*/
public function addMyButton(MyButton $button){
$this->buttons[] = $button;
return $this;
}
public function getControl() {
$wrapper = Html::el('div class="btn-group"');
foreach ($this->buttons as $button) {
$wrapper->add($button->getControl());
}
return $wrapper;
}
}
Objekt MyButton jsou potomek třídy Nette\Forms\Controls\Button.
díky za radu.
- bluray
- Člen | 178
Mám třídu která dědí od Form:
class MyForm extends Nette\Application\UI\Form{
public function addButtonGroup($name, array $buttons){
$control = new ButtonGroup();
$control->setButtons($buttons);
$this[$name] = $control;
return $control;
}
}
A v presenteru pak mám toto:
public function createComponentPokusForm(){
$form = new MyForm();
$form->addButtonGroup("tlacitka", [new MyButton("Button1"), new MyButton("Button2")]);
}
- Unlink
- Člen | 298
To by chcelo názor niekoho kto sa do toho viac vyzná, načo tlačidlo potrebuje formulár.
Ale formulár ako taký je komponenta ktorá je zložená z ďalších
komponent (používa sa nette component model)
Pri každom volaní $form->addNeco
sa komponenta pripojí do
stromu komponent.
BaseControl
má metódu getForm
ktorá získa form
ku ktorému je komponenta pripojená a keď nieje nikde pripojená tak vyhadzuje
tú výnimku.
https://api.nette.org/…rol.php.html#110
A tak už viem
https://api.nette.org/…rol.php.html#140
tuna je potrebné aby to bolo pripojené ku formuláru, aby vedelo
vygenerovať idčko.
Editoval Unlink (29. 6. 2015 15:00)