Kdyby replikátor ve spolupráci s Form->addCondition(…)-toggle(…);

Nax
Člen | 35
+
0
-

Zdravím,

řeším teď problém kdy nevím jak vyřešit spolupráci kdyby replikátoru s podmíněnýma form controlama.

Konkrétně, mám ve formuláři smluvní strany, každá strana může mít více subjektu, každý subjekt pak muže být fyzická osoba nebo firma. Uživatel si muže ke smluvní straně pomocí kdyby replikátoru přidat kolik subjektů chce. U každého subjektu je radiobutton jestli je subjekt firma nebo člověk, když je zaškrtlá firma, pomocí form->addCondition->toggle zobrazím 2 fieldy ič a dič.
Problém ale je, že na to abych zobrazil ty fieldy, je musím zabalit do divu a tomu dát nějaké IDčko (nebo oidčkovat jednotlivé fieldy, to už je fuk). To se ale špatně dělá s replikátorem, kde nevím jakým zpusobem bych to mohl oIDčkovat.

Je na toto prosím nějaká řešení?

Díky moc.

Nax
Člen | 35
+
0
-

Zatím jsem to vyřešil tak že jsem si vytáhl počet komponent v replikovatelné komponentě, z toho si vytáhl IDčko současné komponenty a vytvořil IDčko elementu který obaluje podmíněné fieldy, ale nepřijde mi to jako moc elegantní řešení takže pokud někdo máte lepší, budu rád..

$form->addDynamic('contractors', function (Container $container) {
            $containerId = count($container->getForm()->getComponent('contractors')->getComponents()) - 1;

            $container->addRadioList('side_type', 'Typ smluvní strany', [
                'p' =>'person',
                'r' => 'company,'
            ])->setDefaultValue('p')
                ->addCondition(Nette\Application\UI\Form::EQUAL, 'p')
                ->toggle("company_fields_$containerId", false)
                ->addCondition(Nette\Application\UI\Form::EQUAL, 'r')
                ->toggle("company_fields_$containerId", true);

            $container->addSubmit('remove', 'Remove')
                ->setValidationScope(FALSE) # disables validation
                ->onClick[] = [$this, 'MyFormRemoveElementClicked'];
        }, 1);
Matey
Člen | 142
+
+1
-

Ahoj, môžeš sa rovno spýtať na jeho meno $container->getName().

$form->addDynamic('contractors', function (Container $container) {
            $containerId = $container->getName();

            $container->addRadioList('side_type', 'Typ smluvní strany', [
                'p' =>'person',
                'r' => 'company,'
            ])->setDefaultValue('p')
                ->addCondition(Nette\Application\UI\Form::EQUAL, 'p')
                ->toggle("company_fields_$containerId", false)
                ->addCondition(Nette\Application\UI\Form::EQUAL, 'r')
                ->toggle("company_fields_$containerId", true);

            $container->addSubmit('remove', 'Remove')
                ->setValidationScope(FALSE) # disables validation
                ->onClick[] = [$this, 'MyFormRemoveElementClicked'];
        }, 1);
Nax
Člen | 35
+
0
-

@Matey Super, nevěděl jsem že je to jeho jméno :-) Tohle je mnohem hezčí. Díky