Formulář s dependent selectem nevrátí hodnotu

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

Zdravím,
mám problém s formulářem. Postupoval jsem podle tohoto návodu
Nevím proč, ale formulář neveme hodnotu value z předchozího selectu.
Zkoušel jsem do handleFirstChange nastavít přímo místo setItems(array()) nastavit nějakou proměnnou s polem a po změně prvního selectu se vyhodilo pole – takle to má být, akorát se pole má načíst z databáze a ne takhle napevno.
Když zvolím z prvního selectu, tak ajax funguje dobře, v logu Network, když vyberu BMW tak se objeví: ?do=searchCar-firstChange&value=BMW – to si myslím, že je správně, ale furt to nevyfiltruje v druhém selectu nepředá pole z proměnné $modelItems, která tahá z databáze.
Nevím si s tím rady, pomohl by mi někdo prosím? Dám sem svoji komponentu. Děkuji.

SearchCarControl.php:

use Nette\Application\UI\Control;
use Nette\Application\UI\Form;

class SearchCarControl extends Control
{
    /** @var Nette\Database\Context */
    private $database;

    public function __construct(\Nette\Database\Context $database)
    {
        parent::__construct();
        $this->database = $database;
    }

    public function render()
    {
        $template = $this->template;
        $template->setFile(__DIR__ . '/SearchCarControl.latte');
        // required to enable form access in snippets
        $this->template->_form = $this['searchForm'];

        $template->render();
    }

    /**
     * Load values to second select
     * @param int
     */
    public function handleFirstChange($value)
    {

        if ($value) {
            $modelItems = $this->getModel($value);

            $this['searchForm']['model']->setPrompt('Nerozhoduje')
                ->setItems($modelItems);

        } else {
            $this['searchForm']['model']->setPrompt('Nerozhoduje')
                ->setItems(array());
        }

        $this->invalidateControl('searchSnippet');
    }

    protected function createComponentSearchForm()
    {
        $firstItems = $this->getManufacturer();

        $form = new Form;
        $form->addSelect('manufacturer', 'Značka:', $firstItems)
            ->setPrompt('Nerozhoduje');

        $form->addSelect('model')
            ->setPrompt('Nerozhoduje');

        $form->addSubmit('send', 'Vyhledej vozidla dle výběru');

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

        return $form;
    }

    /**
     * @param form
     */
    public function processSelectForm(Form $form)
    {
        // $form->getValues() ignores invalidated input's values
        $values = $form->getHttpData();
        unset($values['do']);
        unset($values['send']);
        //dump($values);
        $this->redirect('Catalog:list', $values);
        // ...
    }

    public function getManufacturer() {

       $row = $this->database->table('cars')
            ->select('DISTINCT manufacturer')
            ->order('manufacturer ASC')
            ->fetchPairs('manufacturer', 'manufacturer');

        return ($row) ? $row : NULL;
    }

    public function getModel($manufacturer) {

       $row = $this->database->table('cars')
            ->select('DISTINCT model')
            ->where('manufacturer = ?', $manufacturer)
            ->order('model ASC')
            ->fetchPairs('model', 'model');

        return ($row) ? $row : NULL;
    }
}

SearchCarControl.latte:

<form n:name=searchForm class="views-exposed">

  <div class="field field-manufacture">
    <label n:name=manufacturer>Výrobce</label>
    <select n:name=manufacturer class="selectpicker" data-style="btn">
    </select>
  </div><!-- /.field -->

  <div n:snippet=searchSnippet class="field field-model">
    <label n:name=model>Model</label>
    <select n:name=model class="selectpicker" data-style="btn">
    </select>
  </div><!-- /.field -->

  <button n:name=send class="btn btn-primary btn-lg btn-block">
    Hledat
  </button><!-- /.views-exposed -->
</form>

<script>
  {include #jsCallback, input => manufacturer, link => firstChange}
</script>

{define #jsCallback}

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

{/define}
Desttro
Člen | 126
+
0
-

Furt si s tím nevím rady, prosím pomůžete mi? Popsal jsem to špatně? JE potřeba více informací? Děkuji mnohokrát.

Desttro
Člen | 126
+
0
-

Zjistil jsem, že když komponentu úplně zruším a dám vše do HomepagePresenteru, tak to funguje – nechápu přoč. Nesetkal se s tím už někdo?

Děkuji