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)