Invalidovanie selectBoxu – problem s validaciou

- duskohu
 - Člen | 778
 
Neviete mi poradit? mam v snippete selectBox:
        $form->addSelect('parent', 'Rodič')
                ->addRule(Form::FILLED, 'Pole "%label" musí byť zvolené!')
                ->setPrompt('- Zvoliť -');
pred invalidaciou mu menim parameter ->setDisabled() (v urcitom pripade ho nepotrebujem tak ho vypnem), problem je v tom ze ked mu nastavim disabled tak mi pri odoslani formulara neprejde cez validaciu, lebo tam mam addRule a predpokladam ze po odoslani sa formular znovu vygeneruje a nema hodnoty ake mu nastavim po invalidacii, ale povodne. Neviete mi poradit ako to riesit?

- duskohu
 - Člen | 778
 
javascriptom? dam priklad:
    protected function createComponentForm() {
        $form = new Form;
        $form->addSelect('grouptype_id', 'Typ', $groupType->fetchPairs("id", "name"))
                ->setAttribute('data-dependent-select-box', $this->dependentSelectBoxDataGenerator('ChangeGroupTypeId'))
                ->addRule(Form::FILLED, 'Pole "%label" musí byť zvolené!')
                ->setPrompt('- Zvoliť -');
        $form->addSelect('parent', 'Rodič')
                ->addRule(Form::FILLED, 'Pole "%label" musí byť zvolené!')
                ->setPrompt('- Zvoliť -');
        $form->addSubmit('add', 'Pridat')
                ->onClick[] = callback($this, 'addGroup');
        return $form;
    }
na data-dependent-select-box mam naviazane JS ktory zavola handle a invaliduje:
    public function handleChangeGroupTypeId($groupTypeId = NULL) {
        if ($groupTypeId != NULL) {
            // nacitam model a nove data do $parentGroup
            $form["parent"]->setItems($parentGroup);
            // ked nepotrebujem tento selectBox tak ho vypnem
            if (ak nastane podmienka ktoru potrebujem) == 0) {
                $form['parent']->setDisabled();
            } else {
            }
        }
        if ($this->presenter->isAjax()) {
            $this->invalidateControl('parent');
        } else {
            $this->presenter->redirect('this');
        }
    }
sablona:
<td n:snippet="parent">{input parent}</td>
Takze ked potrebujem parent je tam a ma aj addRule, vsetko je ok, ale problem je ked parent nepotrebujem a nastavim ho ako disable a potom invalidujem, tak po odoslani asi pred validaciou sa formular zase nastavi na povodne hodnoty, teda parent value je NULL a tym padom neprejde cez validaciu. A to je moj problem.

- duskohu
 - Člen | 778
 
tak som to tak urobil, ale aj napriek tomu mi po odoslani formulara cez validaciu neprejde, a nevypise ani error. Mozno preto ze validacia neziska Values, lebo po invalidacii snippetu formulara a nasledne odoslanie formulara sa values ziskavaju cez ->getHttpData(); a validacia pouziva asi ->getValues();
    protected function createComponentForm() {
        $form = new Form;
        $form->addSelect('grouptype_id', 'Typ', $groupType->fetchPairs("id", "name"))
                ->setAttribute('data-dependent-select-box', $this->dependentSelectBoxDataGenerator('ChangeGroupTypeId'))
                ->addRule(Form::FILLED, 'Pole "%label" musí byť zvolené!')
                ->setPrompt('- Zvoliť -');
        // len ak grouptype !=1 tak
        $form->addSelect('parent', 'Rodič')
                ->addConditionOn($form['grouptype_id'], ~Form::EQUAL, 1)
                ->addRule(Form::FILLED, 'Pole "%label" musí byť zvolené!');
                ->setPrompt('- Zvoliť -');
        $form->addSubmit('add', 'Pridat')
                ->onClick[] = callback($this, 'addGroup');
        return $form;
    }
EDIT: proste toto: https://blog.nette.org/…-and-pure-js s pouzitim nejakeho addRule nebude fungovat.
Editoval duskohu (27. 12. 2012 16:31)