Invalidovanie selectBoxu – problem s validaciou

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

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?

enumag
Člen | 2118
+
0
-

Co mu to disabled nedávat při vytváření formuláře, ale až později javascriptem?

duskohu
Člen | 778
+
0
-

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.

enumag
Člen | 2118
+
0
-

Tak před to problémové addRule, dej ještě addCondition s tou samou podmínkou (respektive negací), ne? ;-)

duskohu
Člen | 778
+
0
-

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)