nefunguje vyber polozky cez selectbox

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

Zdravim, na formulari mam select, v ktorom sa da vyberat kategoria. Hacik je ale v tom, ze mam rozne typy kategorii, a ja chcem dat uzivatelovy na vyber iba kategorie urciteho typu, na zaklade parametra v adrese.

Robim to nasledovne:

– v metode renderAdd mam parameter $what, ktory si ulozim do atributu presentera:

	public function renderAdd($what)
	{
	  $this->categoryType = $what;
	}
  • v metode createComponentAddItemForm() si na zaklade tohto atributu vytiahnem prislusne kategorie:
	protected function createComponentAddItemForm()
	{
		Debugger::dump($this->categoryType);

		$form = new Form();
		$form->addSelect('category', 'Category:', $this->context->database->query("SELECT id, name FROM item_category WHERE type = ".$this->categoryType)->fetchPairs() );

		...

		$form->onSuccess[] = callback($this, 'addItemFormSubmited');
		return $form;
	}
  • a v metode addItemFormSubmited() by som rad spracoval vybranu hodnotu, ale $form->values->category mi vrati NULL

Problem je v tom, ze po odoslani formulara sa z nejakeho dovodu najskor zavola metoda createComponentAddItemForm(), potom addItemFormSubmited() a az nakoniec renderAdd().

Potom je logicke, ze pri volani createComponentAddItemForm() nie je este atribut $this->categoryType nastaveny (ma hodnotu NULL). Dosledkom toho je, ze selectBox neobsahuje ziadne kategorie, a asi preto mi v metode addItemFormSubmited() vyraz $form->values->category vrati NULL.

Preco sa pri odoslani formulara volaju tieto metody v takomto obratenom poradi a ako by sa to dalo obist ?? Vdaka za rady.

marek.dusek
Člen | 99
+
0
-

vymen „renderAdd“ za „actionAdd“

viz zivotni cyklus presenteru

  • render se vola az po zpracovani signalu
  • takze kdyz „jen“ zobrazujes formular poprve, vyzada si jeho vytvoreni az sablona, tj. renderAdd uz probehlo
  • ale kdyz ten formular odesles, vyzada si jeho vytvoreni uz obsluha signalu, takze to do renderAdd jeste nedoslo