AJAX selectbox bez definovaných options

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

Vytvářím formulář, kde mám obce a psč.

Políčko PSČ na svojí změnu volá signál (handlePsc()), ten podle PSČ vybere města do selectboxu. To funguje dobře.

V případě, že se vyskytne chyba ve formuláře → selectbox se vymaže (workaround přes onError). Pokud na tom chci nějakou podmínku, musím udělat callback a pracovat s getRawValue(). Stejně tak v onSuccess pak musím používat RawValue.

Problém je podle mě zde, protože nezadávám ty výchozí hodnoty, když je zadám – vše funguje normálně. Ale já je zadávat nechci. :) Přece tam nebudu cpát 17.500 záznamů všech měst.

$form->addSelect('obec_id','Název obce',array("17.500 řádek"))
nebo
$form->addSelect('obec_id','Název obce')

Kód je pro druhou variantu.

public function createComponentForm()
{
	$form = new Form;
	...
	$form->addSelect('obec_id','Název obce')
		->addRule(callback($this,'checkObec'));
	...
	$form->onError[] = $this->errorForm; //Naplnění selectboxu po chybě
}

public function checkObec($select)
{
	//Otestování hodnoty
	$select->getRawValue();
}

public function handlePsc($value)
{
	//výběr měst z modelu
    asort($citties);
    $this['form']['obec_id']->setItems($citties);
}

public function errorForm(Form $form)
{
	//Získat místa apod.
	$this['form']['obec_id']->setItems($citties);
    $this['form']['obec_id']->setValue($form->getValues()->obec_id);
}

Jak to řešíte vy? Existuje nějaký best practise? Žádný jsem nenašel.