Dynamická zmena formulárového prvku v Kdyby\Replicator

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

Ahojte,

snažím sa docieliť vo formulári toho, že po kliknutí na tlačítko sa zmení SelectBox na TextInput. Funguje to a aj by to fungovalo ak by to nebolo zanorené v Kdyby\Replicator a tu prichádza problém. Akonáhle kliknem, že chcem pridať nový container, formulár sa prekreslí a táto zmena je stratená.

Formulár:

<?php
$items = $form->addDynamic("items", function(Container $item) use($predefinedVat) {
            // bla bla
            $item->addSelect("unit", null, DefaultValues::getUnitTypes());
            $item->addSubmit("change", "Change")
                    ->setValidationScope(FALSE)
                    ->onClick[] = [$this, "changeUnitToText"];
           // bla bla
        }, 1);
$items->addSubmit('add', 'Pridať')
            ->setValidationScope(FALSE)
            ->onClick[] = [$this, 'addComponent'];
/**
     * Changes unit selectbox to input type box
     * @param \Nette\Forms\Controls\SubmitButton $button
     */
    public function changeUnitToText(SubmitButton $button) {
        unset($button->getParent()["unit"]);
        $button->getParent()->addText("unit");
    }
?>

Čiže akonáhle kliknem na change, form sa prekreslí a zo selectu sa stáva textinput.

A ak potom kliknem na tlačítko add pre pridávanie nového kontaineru, tak selectbox je naspať a pridá sa nový riadok…

Ako teda by som docielil môjho požadovaného výsledku?:-\

dakur
Člen | 493
+
0
-

To protože submitem „add“ přebiješ submit „change“, který generuje textfield v changeUnitToText(). Takže při „change“ si někam musíš uložit, že určité pole už je text field. Třeba do session? Nebo do nějakého hidden pole?

Editoval dakur (18. 3. 2016 12:55)