3 zavisle selectboxy s nette.ajax

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

Zdravíčko,
dle kuchařky (zde) jsem si sprovoznil 3 závislé selectboxy, nicméně narazil jsem na problém s předáváním proměných. Pro naplnění třetího, posledního, selectboxu z databáze potřebuju údaje z OBOU předcházejících selectboxů. Jedná se pouze o testovací úrivek kódu, proto jsou tam i chyby logiky, ale o těch vím.
Budu moc vděčný, za popostrčení. Díky moc ;)
Presenter:

***
//Naplneni selectboxu misto na zaklade vyberu typu mista
    public function handleFirstChange($valu)
    {
        if ($valu == '1') {
            $secondItems = $this->database->table('sklad')->fetchPairs('ID_Sklad', 'Sklad');
        }
        else if ($valu == '2') {
            $secondItems = $this->database->table('pop')->fetchPairs('ID_Pop', 'Pop');
        }
        else if ($valu == '3') {
            $secondItems = $this->database->table('zakaznik')->fetchPairs('ID_Zakaznik', 'Cislo');
        }
        else {
            $this['selectForm']['second']->setPrompt('Select from first')->setItems(array());
        }
        $this['selectForm']['second']->setPrompt('Select')->setItems($secondItems);
        $this->invalidateControl('secondSnippet');
        $typ = $valu; //TUTO HODNOTU POTŘEBUJI PřEDAT HANDLE SECOND, ALE NEJDE MI TO
        }

    //Naplneni selectboxu EVC na zaklade vyberu mista a typu mista
    public function handleSecondChange($valu, $typ)
    {
        if ($valu) {
            $thirdItems = $this->database->table('zarizeni')->where('ID_Misto', $valu)->where('Typ', $typ)->fetchPairs('ID_Zarizeni', 'EVC');

            $this['selectForm']['third']->setPrompt('Select')->setItems($thirdItems);
        }
        //$this['selectForm']['third']->setPrompt('Select from second')->setItems(array());
        $this->invalidateControl('thirdSnippet');
    }

    protected function createComponentSelectForm()
    {
        $form = new Form;
        $form->addSelect('first', 'Typ místa:', array(1 => 'Sklad', 2 => 'Pop', 3 => 'Zakaznik'))
             ->setPrompt('Select');
        $form->addSelect('second', 'Místo:')
             ->setPrompt('Select from first');
        $form->addSelect('third', 'EVC:')
            ->setPrompt('Select from first');
        $form->addSubmit('send', 'Submit');

        $form->onSuccess[] = $this->processSelectForm;

        return $form;
    }
***

Latté:

***
{define #js}

<script type="text/javascript">
{include #jsCallback, input => first, link => firstChange}
{include #jsCallback, input => second, link => secondChange}
</script>

{/define}


{define #jsCallback}

$('#{$control["selectForm"][$input]->htmlId}').on('change', function() {
    $.nette.ajax({
        type: 'GET',
        url: '{link {$link}!}',
        data: {
            'valu': $(this).val(),
        }
    });
});

{/define}
***