Komponenty + naplnění položek selectu
- TOMeek
- Člen | 64
Zdravím,
narazil jsem na problém ,který nejsem schopen lousknout a na fóru jsem
k němu nenašel odpověď.
Mám komponentu ve které mám něco takového
...
public function render($item_id)
{
...
$this["form"]["varianta"]->setItems( $items );
$this->template->render();
}
protected function createComponentForm($name)
{
$form = new Nette\Application\UI\Form();
$form->addSelect( "varianta", "Varianta" );
$form->addSubmit( "send", "přidat" );
$form->onSuccess[] = $this->formSucceeded;
return $form;
}
public function formSucceeded($form, $values)
{
dump( $values );
}
...
Tím se mi select naplní variantami. Po odeslání včak dostanu u
$values->varianta
NULL, protože se send provede před
vykreslením položek. Nepřišel jsem ale na to, jak select naplnit ještě
před vykreslením. Kdyby to byl presenter dám to do action a je vyřešeno.
Komponenta ale životní cyklus nemá (nebo se pletu) a proto se action nebo
beforeRender minuli účinkem. Je nějaké řešení?
- Václav Kraus
- Člen | 77
Nepomohlo by
$form->onSuccess[] = [$this, 'formSucceeded'];
Editoval Václav Kraus (24. 2. 2016 12:37)
- David Matějka
- Moderator | 6445
Hlavni problem je, ze si $item_id predavas az ze sablony. Pouzij namisto toho multiplier, v nem si vytvoris pro kazdou item jednu komponentu, id predas do konstruktoru, takze to budes mit k dispozici v createComponentForm a budes tam moct vytahnout varianty z db
- TOMeek
- Člen | 64
David Matějka napsal(a):
Hlavni problem je, ze si $item_id predavas az ze sablony. Pouzij namisto toho multiplier, v nem si vytvoris pro kazdou item jednu komponentu, id predas do konstruktoru, takze to budes mit k dispozici v createComponentForm a budes tam moct vytahnout varianty z db
Jak jednoduché a krásné řešení. Děkuji, už to funguje jak má.