Dynamické přidání prvku do formuláře

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

Ahoj, mám tuto komponentu:

protected function createComponentSurvey()
    {
        $form = new Form;
        $choices = ['yes' => 'Ano', 'no' => 'Ne'];
        $reason = $form->addRadioList('choice', 'Odpověď:', $choices);
        if($reason->value == "no"){
            $form->addTextArea("messagereason", "Odůvodnění:");
        }
        $form->addSubmit('vote', 'Hlasovat')->setDisabled(true);

        $form->addProtection('Vypršel časový limit!');
        $form->onSuccess[] = [$this, 'surveySucceeded'];
        return $form;
    }

Jde mi to, že mám dvě volby v RadioListu a pokud vyberu druhou, tak aby se přidala TextArea. Musí se to nějak překreslovat, použít jQuery nebo by to mělo takto fungovat s tím, že tam je pouze něco špatně? Díky :)

EDIT: Během čekání na odpověď jsem zkusil něco jako:

$form->addRadioList('choice', 'Odpověď:', $choices)
     ->addCondition($form::EQUAL, 'no')
     ->toggle();

Akorát teda nevím, co dosadit do toggle. Podle návodu to má být ID divu. Netuším, jakého divu, když TextAreu chci přidat pomocí addTextArea :-D

Editoval ForestCZE (22. 10. 2017 16:35)

duke
Člen | 650
+
0
-

Příklad:

PHP:

	$form->addCheckbox('changePassword', 'změnit heslo')
		->addCondition($form::EQUAL, TRUE)
		->toggle('changePasswordToggle');

Latte:

	<div id="changePasswordToggle"{if !$_form->getToggles()[changePasswordToggle]} style="display:none"{/if}>
		<label n:name="password" class="control-label">{$_form[password]->caption}</label>
		<input n:name="password" class="form-control">
	</div>

Kód {if !$_form->getToggles()[changePasswordToggle]} style="display:none"{/if} není nezbytný, neboť při jeho absenci dojde ke skrytí obsahu následně javascriptem. Takhle je to však uživatelsky přívětivější.

ForestCZE
Člen | 209
+
0
-

Moc děkuji za příklad. Je to ten případ, na co jsem narazil v EDIT. Co s tím Latte, když to nevykresluju manualně? Mám normálně:

{control survey}

Editoval ForestCZE (23. 10. 2017 4:43)

Mistrfilda
Člen | 76
+
+2
-

Ahoj,

zkus se podivat na tento navod , myslim ze je to presne to co hledas :)

Id k prvku ktery takto vykreslujes muzes pridat pomoci

$form->addTextArea('note', 'Note')
    ->setOption('id', 'text-note');

a pak toggle pres

$form->addRadioList('choice', 'Odpověď:', $choices)
     ->addCondition($form::EQUAL, 'no')
     ->toggle('text-note');

Editoval Mistrfilda (23. 10. 2017 11:00)

ForestCZE
Člen | 209
+
0
-

Mistrfilda napsal(a):

Ahoj,

zkus se podivat na tento navod , myslim ze je to presne to co hledas :)

Id k prvku ktery takto vykreslujes muzes pridat pomoci

$form->addTextArea('note', 'Note')
    ->setOption('id', 'text-note');

a pak toggle pres

$form->addRadioList('choice', 'Odpověď:', $choices)
     ->addCondition($form::EQUAL, 'no')
     ->toggle('text-note');

Na ten návod jsem samozřejmě koukal :) Akorát jsem právě nevěděl, co s tím Latte, když vykresluju přes control. Ještě jsem to nezkusil, ale dává to smysl, co jsi mi poradil. Jsem zvyklý používat SetAttribute. Je to jedno? Každopádně moc díky :)

EDIT: Funguje to parádně! Opravdu moc děkuju :)

Editoval ForestCZE (23. 10. 2017 13:36)