Podmíněná hodnota (->addConditionOn… ->setDefaultValue)

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Tomáš Votruba
Moderator | 1114
+
0
-

Zdravím, mám třeba kalkulačku platových tříd a na základě výběru třídy chci do dalšího pole nastavit výši platu.

<?php
$form->addSelect("trida","Vaše třída",$tridy);
$form->addText("zakladníPlat","Plat:")
	->addConditionOn($form["trida"],Form::EQUAL,1)
		->setDefaultValue("15000");
?>

To mi vrací chybu Call to undefined method Nette\Forms\Rules::setValue(), takže se (zřejmě) potřebuji dostat o úroveň výše, ale nevím jak.

Filip Procházka
Moderator | 4668
+
0
-

Nette formuláře nic takového neumí. Vůbec.

Musíš si to napsat v javascriptu a udělat si sám i obsluhu v onSuccess.

Mikulas Dite
Člen | 756
+
0
-

A nešlo by

$form->addText("zakladníPlat","Plat:")
	->setValue($form["trida"]->value === 1 ? "15000" : $form['trida']->value);
Filip Procházka
Moderator | 4668
+
0
-

To by šlo, ale počítá to s tím, že formulář připojíš před přidáním tohohle prvku. Což není pěkné (jsem zjistil). Když už, tak raději do action.

Patrik Votoček
Člen | 2221
+
0
-

HosipLan napsal(a):

To by šlo, ale počítá to s tím, že formulář připojíš před přidáním tohohle prvku. Což není pěkné (jsem zjistil).

Ehm?

Filip Procházka
Moderator | 4668
+
0
-

@**Patrik Votoček**:

To by šlo, ale počítá to s tím, že formulář připojíš před přidáním tohohle prvku.

Pokud formulář nepřipojíš takto

$form = new Form($this, $name);

nebo

$form[$name] = new Form;

nemůžeš číst jeho hodnoty:

$form->addText("zakladníPlat","Plat:")
        ->setValue($form["trida"]->value === 1 ? "15000" : $form['trida']->value);

Což není pěkné (jsem zjistil)

Dřív jsem formuláře připojoval jenom takto, protože jsem si do nich pak mohl dávat podmínky tohohle typu. Ale přestalo se mi to líbit, když jsem začal používat formuláře jako plnohodnotné komponenty (potomky UI\Form), sestavené z jiných plnohodnotných komponent (potomky Forms\Container), nejčastěji pomocí builderů.

attached je úžasná metoda :)