Dynamické pridávanie prvkov AJAX requestu do formulára

Aris
Člen | 48
+
0
-

Ahojte, nejaká best practice ako je najvhodnejšie pridávať dynamicky prvky formulára? Mám 2 formuláre, do jedného pridávam prvky dynamicky AJAX-om, druhý je statický rozšírený o multiplier(ne-AJAX). Praktickejšie bude mať na stránke iba jeden formulár s odoslaním, zároveň sa ajaxovo pridané prvky uložia. Ako na to?

Pri spojení klasického formulára a dynamicky vytvoreného (replikovaním AJAX snippetov) sa nedostanem po odoslaní k hodnotám dynamických prvkov…

{form testForm}
	{input publish_time}
	//klasicke inputy
	...
	//neajaxovy multiplier
	<div n:multiplier="multiplier"  class="m-b-10 col-md-12">
        <input n:name="krok" class="form-control d-inline-block" placeholder="Postup">
        {btnRemove}
    </div>
    <span>
         {btnCreate multiplier}
         {btnCreate $form[multiplier]:5}
    </span>
	//pridanie dynamicky vytvorenych prvkov
	<div class="list-group" n:snippet="selectedVal" data-ajax-append="true">
		<div  class=" list-group-item list-group-item-action flex-column align-items-start " >
			<input name="sel[]" class="form-control d-inline-block" placeholder="Poznámka" value="">
			...
		</div>
	</div>
{/form}
public function testFormSucceeded(Nette\Application\UI\Form $form )
    {
		//vytiahnutie values z dynamickeho formulara (po spojeni nefunguje)
		$values = $form->getHttpData($form::DATA_TEXT | $form::DATA_KEYS, 'sel[]');
		//vytiahnutie values z klasickeho formulara (po spojeni obsahuje iba hodnoty nedynamickej casti)
		$values = $form->values();
	}

Hral som sa i s webchemistry/forms-multiplier. Tam by sa dal použiť 2× multiplier a oba zajaxovať. Ak je toto riešenie prípustnejšie, ako naviazať AJAX-handle vyvolaný $.ajax.nette pri výbere suggestion-u na dynamickú zmenu polí formulára a následný redraw?

$copies_2=1;
$maxCopies_2=10;
$multiplier_2= $form->addMultiplier('testMultiplier',
    function (Nette\Forms\Container $container, Nette\Forms\Form $form)
    {
        $container->addText('skusobnyInput');
    }, $copies_2, $maxCopies_2);
$multiplier_2->addRemoveButton('x')
->addClass('ajax btn btn-danger pull-right m-t-5');
            $multiplier_2->addCreateButton('Pridať')
->addClass('btn btn-primary pull-right m-r-15');

Ďakujem :) .

Editoval Aris (24. 11. 2018 14:35)