Výběr z databáze po kliknutí na tlačítko a použití dalšího tlačítka – Nette v2.0
- Prochy
- Člen | 91
Zdarvim,
mám formulář, kde je SelectBox, kde mám seznamy číselníku, a já chci,
že když vyberu určitý číselník a kliknu na tlačítko, tak aby se mi
načetla stránka, kde budou vypsané položky číselníku. Myslel sem, že to
udělám, tak že kliknu na tlačíko a zavolám událost, kde přidám do
továrny další select box, kde chci zobrazit položky číselníku, ale to mi
nejde. Tak by mě zajímalo, jak by se takováto věc měla správně
naprogramovat? Myslel jsem něco takovéhoto:
formulář
protected function createComponentDialForm($name)
{
$form=new Form();
$form->addSelect(,,$dials);
$form->addSubmit('choose_dial',)->onClick[]=callback($this,'chooseDialFormSubmitted');
return $form;
}
public function chooseDialFormSubmitted(SubmittedButton $button){
$dialItems=funkce pro vyhledání položek číselníku
$button->form->addSelect('dial_item','Položky číselníku',$dialItems);
$form->addSubmit('delete_item',)->onClick[]=callback($this,'deleteItemDialFormSubmitted');
}
Jak asi sami víte tohle mi nefunguje. Tušim, že by to mohlo být tím, že
$form není globálně nadefinovanej jako form, a pokaždý se ta instance
zruší po odeslání toho delete tlačítka.
Mohu tedy poprosit, jak to správně udělat? Napadlo mě ještě hodit nějaký
‚ifi‘ do továrničky, ale to mi přijde jako prasárna. Další věc, co
mě napadla, bylo to, že bych ten select dial_item hodil do továrničky a
nastavil parametr Disabled(), a potom naplnil hodnoty v tom DialFormSubmitted,
ale taky nejde, jelikož už nemohu později naplnit hodnoty, nebo jsem na to
zatim nepřišel. Pokud možnost všechno to chci mít na jedné stránce.
Předem se omlouvám za ten název Dial, ale nevim jak se řekne anglicky pro
databázovej číselník. :)
Za každou pomoc budu moc vděčnej.
- nanuqcz
- Člen | 822
Ahoj, podle mě by mělo fungovat
public function chooseDialFormSubmitted(SubmittedButton $button){
$dialItems = funkce pro vyhledání položek číselníku
$this['dialForm']->addSelect('dial_item','Položky číselníku',$dialItems);
$this['dialForm']->addSubmit('delete_item','Smazat')->onClick[] = callback($this,'deleteItemDialFormSubmitted');
}
ale jestli je to čisté řešení, si netroufám tvrdit. Pokud nespěcháš, raději si počkej na odpověď někoho zkušenějšího v tomhle :-)
- nanuqcz
- Člen | 822
Tak jsem si to zkusil a problém je zde: Po odeslání formuláře
tlačítkem delete_item
se už znovu neprovede
chooseDialFormSubmitted
(což je správně), takže ve formuláři
už tlačítko delete_item
vlastně není, a tak je callback
neplatný.
Vyřešil jsem to persistentní proměnnou, kam si ukládám, jestli už byla hodnota z prvního selectu vybrána. Funkční řešení tedy vypadá takhle (pro porovnání, nefunkční řešení zde).
Moc se mi to řešení ale nelíbí a mám pocit, že by se dalo vymyslet i hezčí. Kdyby měl někdo nápad, podělte se ;-)
Editoval nanuqcz (3. 3. 2012 14:37)