Zavolání setDisabled zruší aktuální hodnotu
- kolsi
- Člen | 131
Ahoj,
občas máme formulář, ve kterém potřebujeme mít nějaký prvek s přednastavenou hodnotou, který ale následně zakážeme měnit. V Nette 2.0 to bylo naprosto bez problému.
Po přechodu na Nette 2.2 jsem si ale všimnul toho, že zavolání setDisabled(TRUE) automaticky i nastaví hodnotu na NULL. Proč? Já chci pouze zakázat editaci, ale nechci NULLovat aktuální hodnotu.
Navíc pokud nebyl prvek disablován už při vytvoření, ale až následně při nějaké podmínce, tak odeslání formuláře vyhodí chybu „Please select a valid option.“.
Nechápu proč, tak prosím o vysvětlení, protože mě to přijde jako nesmysl.
- kolsi
- Člen | 131
Díky, otočení setDefaultValue/setDisable pomůže tomu, že se hodnota správně nastaví.
Nevyřeší to ale ten druhý problém – při odeslání mi to vrátí „Please select a valid option.“. Zádrhel vidím v tom, že u disabled se hodnota neodešle (to je dobře), ale jelikož já nastavuji setDisabled až se zpožděním, tak to neprojde validací.
Takhle je to v kódu Nette:
/**
* Performs the server side validation.
* @return void
*/
public function validate()
{
parent::validate();
if (!$this->isDisabled() && $this->prompt === FALSE && $this->getValue() === NULL && $this->options) {
$this->addError($this->name . ": " . Nette\Forms\Rules::$defaultMessages[self::VALID]);
}
}