Vykreslování DependencySelectBox

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

Zdravíčko,

prosím Vás, trhá mi nervy Dependency Select Box.
Snažím se manuálně vykreslit formulář, který obsahuje dependent select box, jenže bez úspěchu.
Když jej vykreslím prostě a přímo pomocí {snippet sForm}{widget form}{/snippet} (Příklad) tak funguje.
Jenže, pokud použiju vlastní renderování, tak se formulář zobrazí jen tehdy, když vynechám řádek, kde je submit button pro manuální aktualizaci depent boxu. Ale pak zase nefunguje dependency select… a druhou stranu, pokud tam jej přidám, tak se formulář nevykreslí…

<?php
public function createComponentSearch($name)
    {
        $form = new AppForm($this, $name);

        $form->addSelect('group', 'Skupina', $this->groups->getGroups()->select(false)->select('groups.id')->as('id')->select('groups.name')->as('name')->execute()->fetchPairs('id', 'name'));
        $form->addDependentSelectBox('category', 'Kategorie', $form['group'], callback($this, 'searchGetCategories'));

        if($this->isAjax())
			$form['category']->addOnSubmitCallback(callback($this, 'invalidateControl'), 'formSearch');

        $form->addSelect('material', 'Material', $this->materials->getMaterials()->fetchPairs('id', 'name'));
        $form->addSelect('body', 'Části těla', $this->body->getBodyParts()->execute()->fetchPairs('id', 'name'));
        $form->addSubmit('search', 'Vyhledat')->onClick[] = callback($this, 'searchSubmitted');

        return $form;
    }
?>

a tedka rendering:
Pokus číslo jedna)

{snippet formSearch}

{$presenter['search']->render('begin')}
                <li class="major">{$presenter['search']->render('errors')}</li>
                <li class="major">{$presenter['search']['group']->control}</li>
                <li class="major"></li>
                <li class="major">{$presenter['search']['category']->control}</li>
                <li class="major"></li>
                <li class="major">{$presenter['search']['material']->control}</li>
                <li class="major"></li>
                <li class="major">{$presenter['search']['body']->control}</li>
                <li class="major"></li>
                <li class="major">{$presenter['search']['group_submit']->control}</li>
                <li class="major">{$presenter['search']['search']->control}</li>
                <li class="major"></li>
                {$presenter['search']->render('end')}

                {/snippet}

tento nefunguje.

Pokus číslo dvě, s tím, že v akci volám $this->template->form = $this['search'];

{snippet formSearch}

                {widget $form errors}
                {widget $form begin}
                <li class="major">{$form['group']->control}</li>
                <li class="major"></li>
                <li class="major">{$form['category']->control}</li>
                <li class="major"></li>
                <li class="major">{$form['material']->control}</li>
                <li class="major"></li>
                <li class="major">{$form['body']->control}</li>
                <li class="major"></li>
                <li class="major">{$form['group_submit']->control}</li>

                <li class="major">{$form['search']->control}</li>
                <li class="major"></li>
                {widget $form end}

{/snippet}

taky bez úspěchu. Co dělám špatně? :/

E: formulář je ve stránky, v jejím kodu, ale neni vykresleny, muze to byt javascriptem? Kazdopadne mam zakomentovany radek v jquery.nette.js //$.dependentselectbox.hideSubmits();.

ok, vyrešeno problém byl v js, konkretne ve funkci hideSubmits, musel jsem ji spazat jednoho rodiče.

hideSubmits: function() {
			// Here hide all you want. Default is to hide <tr> of button
            $('.'+$.dependentselectbox.controlClass+$.dependentselectbox.buttonSuffix).parent().hide();
			//$('.'+$.dependentselectbox.controlClass+$.dependentselectbox.buttonSuffix).parent().parent().hide();
		},

Editoval Mesiah (24. 11. 2010 12:54)