Jak použít adConditionOn a setDisabled

inri
Člen | 10
+
0
-

Ahojte, mám tady malý problém, se kterým ale nedokážu pohnout. Potřebuju ve formuláři u pole přidat podmínku, že pokud v nějakém předchozím poli je určitá hodnota, tak se tohle pole automaticky nastaví na hodnotu, která nejde měnit.

$this->addText(„type“, „type“);

$this->addSelect(„public“, „verejny“, $this->isPublic())
->addConditionOn($this[‚type‘], self::EQUAL, ‚hodnota1‘)
->setDisabled()->toggle(‚0‘);

Tracy hlásí: Call to undefined method Nette\Forms\Rules::setDisabled().

Nedokážu přijít na to, jakým jiným způsobem to nastavit…
Díky předem za odpovědi.

Polki
Člen | 553
+
0
-

Je rozdíl, mezi třídou BaseControl, kterou vrací metoda ->addSelect a třídou Rules, kterou vrací metoda ->addConditionOn a která tuto metodu již nemá.

Pokud jde o metodu ->setDisabled, tak tuto můžeš nastavit pouze inputu a přijmá bool parametr, kterým lze při vykreslování nastavit disabled, ale již ne dynamicky. Jde o to, že při nastaveném Disabled se z bezpečnostních důvodů vůbec neparsují hodnoty tohoto prvku při odeslání. Tedy nelze jednoduše zjišťovat, jestli se prvek jako disabled na klientovi nastavoval dynamicky.

Obejít to můžeš buď vlastním JavaScriptem, který ti to bude nastavovat na klientovi podle tvých preferencí, nebo tak, že si vytvoříš 2 prvky, jeden bude disabled a druhý ne a jen je budeš prohazovat pomocí ->toggle tak jak to máš, ale bez ->setDisabled.

Osobně doporučuji spíše první způsob. Nicméně pro mě by byla jasná volba to, co nechci aby uživatel editoval jednoduše skrýt pomocí ->toggle aby to vůbec neviděl…

inri
Člen | 10
+
0
-

Díky moc za odopověď a nasměrování. Jinak já to tam potřebuju mít zobrazené, pracuju podle zadání..