setItems po addConditionOn

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

Zdravím,

měl bych dotaz… V presenteru (a ve funkci createComponentRegisterForm) mám:

$crsr = [
	'Česká republika' => 'Česká',
	'Slovenská republika' => 'Slovenská'
];

$form->addSelect('country', 'Republika', $crsr);

$krajeCR = [
	'Praha' => 'Praha',
	'Středočeský kraj' => 'Středočeský',
	'Jihočeský kraj' => 'Jihočeský',
];

$krajeSR = [
	'kraj1' => 'kraj1',
	'kraj2' => 'kraj2',
];

$form->addSelect('region', 'Kraj')
	->addConditionOn($form['country'], Nette\Application\UI\Form::EQUAL, 'Česká Republika')
		->setItems($krajeCR)
	->addConditionOn($form['country'], Nette\Application\UI\Form::EQUAL, 'Slovenská Republika')
		->setItems($krajeSR)
	->setRequired();

Následně vyhodí chybu: Call to undefined method Nette\Forms\Rules::setItems().

Je vůbec možné udělat to tak, aby když uživatel vybere např. českou republiku, tak aby v selectu s kraji byly jen kraje ČR?

Děkuji.

Editoval sd (26. 9. 2015 12:48)

duke
Člen | 650
+
0
-

Ne, pro toto podpora v Nette není, ale podobného výsledku můžeš dosáhnout pomocí toggles. Uděláš si zvlášť selekty pro české a slovenské kraje, a přes addCondition a toggle je (či lépe nějaké obalující html prvky nad nimi) učiníš viditelné podle hodnoty selektu country. Jinak to jde samozřejmě taky ještě přes ajax/snippety, což se tu už mnohokrát řešilo pod názvem „závislé selekty“.

Pro představu ty toggles:

$form->addSelect('country', 'Republika', $countries)
	->addCondition($form::EQUAL, self::CZECH_REPUBLIC)
		->toggle('czToggle')
	->elseCondition()
		->toggle('skToggle');

V šabloně pak budeš mít ty selekty krajů např. uvnitř divů:

<div id="czToggle">{input regionCZ}
</div>
<div id="skToggle">{input regionSK}
</div>
sd
Člen | 87
+
0
-

Super, děkuji moc :)