Vykreslování DependencySelectBox
- Mesiah
- Člen | 240
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)