U disabled prvku formuláře nefunguje metoda setDefaults() – chyba framework?
- m.brecher
- Generous Backer | 499
Ahoj,
narazil jsem na chybné chování metody Nette\Application\UI\Form::setDefaults().
Metoda setDefaults() nastavuje výchozí hodnoty prvků formuláře, roky používám a funguje to. U disabled prvku ale při post-nutí formuláře výchozí hodnota zmizí a disablovaný prvek je prázdný. Pokud místo setDefaults() použiji přímo na disablovaném prvku setDefaultValue(), tak hodnota nezmizí a vykreslí se i v post-nutém formuláři:
Ukázka kódu presenter:
public function renderUpdate(int $id)
{
$this['myForm']->setDefaults(['test' => 1]); // při POST formuláře nefunguje - hodnota se nevykreslí
$this['myForm']['test']->setDefaultValue(1); // funguje i při POST formuláře - hodnota se vykreslí
}
public function createComponentMyForm(): Form
{
$form = new Form;
$form->addSelect('test', 'Test', [1 =>'Jedna', 2 => 'Dvě'])
->setPrompt('')
->setDisabled();
$form->addSubmit('updateButton', 'Uložit')
->onClick[] = [$this, 'handleUpdate'];
return $form;
}
public function handleUpdate(ArrayHash $values)
{
.....
}
Vyřeším to tedy tak, že hodnoty disablovaných prvků budu nastavovat pomocí setDefaultValue(), ale zřejmě se zde jedná o chybu v metodě setDefaults(), která by se měla odstranit.