U disabled prvku formuláře nefunguje metoda setDefaults() – chyba framework?

m.brecher
Generous Backer | 499
+
0
-

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.