Komponenty + naplnění položek selectu

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
TOMeek
Člen | 64
+
0
-

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
+
0
-

Nepomohlo by

$form->onSuccess[] = [$this, 'formSucceeded'];

Editoval Václav Kraus (24. 2. 2016 12:37)

David Matějka
Moderator | 6445
+
+2
-

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
+
0
-

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á.