Dynamické přidávání prvku formuláře přes js

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

Ahoj, jak mám přidat přes JS další položku v formuláři prosím? Laboruju s kdyby replicator a nedaří se mi.

$photos = $form->addDynamic('photos', function (\Nette\Forms\Container $photo) use ($form) {
            $photo->addText("photo","obrazek");
        },3);

        $photos->addSubmit('add', 'Pridat')
          ->setAttribute('class', 'ui primary button')
          ->setValidationScope(false)
          ->addCreateOnClick(true);

        $form->addSubmit("ok","OK");

Latte:

{control xxxForm}

Co mám mít v js, aby se po kliknutí na přidat přidal input? Teď se mi na tvrdo přidávají 2 další inputy, jak to udělat dynamicky?
Díky za rady.

Editoval ppar (8. 11. 2016 21:01)

Petr Parolek
Člen | 455
+
0
-

Vyřešeno

	public function createComponentPhotogallerySettingsForm()
{
    $form = new Form;

    $removeEvent = [$this, 'photoFormRemoveElementClicked'];

    $photos = $form->addDynamic('users', function (Container $photo) use ($removeEvent) {
        $photo->addText('date','Datum:');

        $photo->addSubmit('remove', 'Remove')
            ->setValidationScope(FALSE) # disables validation
            ->addRemoveOnClick();
    }, 1);

    $photos->addSubmit('add', 'Pridat')
        ->setAttribute('class', 'ui primary button')
        ->setValidationScope(false)
        ->addCreateOnClick(TRUE);

    $form->addSubmit('send', 'Odeslat');
    $form->onSuccess[] = array($this, 'photogallerySettingsFormSucceeded');

    return $form;
}

public function photogallerySettingsFormSucceeded(Form $form, $values)
{
    \Tracy\Debugger::barDump($values);
}

public function photoFormAddElementClicked(SubmitButton $button)
{
    $users = $button->parent;

    // count how many containers were filled
    if ($users->isAllFilled()) {
        // add one container to replicator
        $button->parent->createOne();
    }
}

public function photoFormRemoveElementClicked(SubmitButton $button)
{
    // first parent is container
    // second parent is it's replicator
    $users = $button->parent->parent;
    $users->remove($button->parent, TRUE);
}
iNviNho
Člen | 352
+
+1
-

Len pridám, že je to takisto možné cez pure JS si pridať nový prvok do svojho formu. Je potreba mu nastaviť správny name a následne v metode, ktorá spracuje formulár požiadať o vrátenie httpdata

<?php

$values = $form->getHttpData();

?>