Změna jednoho selectu v závislosti na druhém

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

Zdravím,
nevím jak vyřešit to, že když uživatel vybere něco z jednoho selectu, tak podle toho co vybral se načte pokaždé něco jiného z DB do druhého selectu. Prosím o radu. Předem děkuji

toka
Člen | 253
+
0
-

jQuery, Ajax a handle v presenteru. Při události onchange prvního selectu přes handle získáš z DB data pro druhý select a naplníš ho.

eldest
Člen | 58
+
0
-

Víš asi ještě nejsem na takové úrovni v Nette jako ty :D takže tohle asi nezvládnu

bazo
Člen | 620
+
0
-

co tak hladat. dokonca uz na to myslim existuje komponenta.

toka
Člen | 253
+
0
-

Javascriptová obsluha za pomocí jQuery:

function loadData(value) {
	jQuery.get({link loadData!}, {"value": value}, function(data) {
		jQuery('#frmformMujFormular-data').replaceWith(data);
	}, "html");
}

Handle, který je volán ajaxem a vrací nově naplněný select:

public function handleLoadData($value) {
	$form = $this->getComponent('formMujFormular');
	$data = $this->model->getData($value);
	$form['data']->setItems($data);
	echo $form['data']->getControl();
    	$this->terminate();
}

Příklad formuláře (částečný):

protected function createComponentFormMujFormular() {
	$form = new AppForm;
	...
	$form->addSelect('rizeni', 'Tento select řídí druhý:', $rizeni)
	     ->getControlPrototype()->onchange('loadData(this.value);');

	$form->addSelect('data', 'Tento select je řízen prvním:', $data);
	...
	return $form;
}

Stačí jako nástin? Nezkoušeno! Sepsal jsem to z hlavy bez možnosti testu. Jinak na fóru určitě najdeš, když budeš hledat – pro mne bylo snazší to znovu sepsat :-) Momentálně jsem na velmi pomalém připojení.

toka
Člen | 253
+
0
-

Metoda modelu getData může vypadat podobně:

public function getData($typ) {
	return $this->db->select('`tabulka`.`id`, `tabulka`.`zaznam`')
	                ->from('`tabulka`')
	                ->where('`tabulka`.`typ` = %i', $typ)
	                ->orderBy('`tabulka`.`zaznam`')
	                ->fetchPairs('id', 'zaznam');
}
Foowie
Člen | 269
+
0
-
eldest
Člen | 58
+
0
-

Děkuju všem za pomoc.