Manuálně vykreslený multidimenzionální dynamický formulář

Rudolf247
Člen | 38
+
0
-

Ahoj,
Zasekl jsem se při manuálním vykreslení multidimenzionálního dynamického formuláře.
Problém je v tom, že když si formulář vykreslím přes {control}, tak vše funguje jak má, bohužel při manuálním vykreslení trošku blbne a nefunguje. A bohužel ho potřebuji vykreslit manuálně kvůli složitějšímu layoutu formuláře.

Takže tady je problémová část formuláře:

$specs = $form->addDynamic('specs', function (Container $specs) use ($removeEvent){
           $specs->addText('name', 'specifikace')
               ->setAttribute('class','form-control');
           $specs->addSubmit('remove', 'Smazat')
               ->setAttribute('class', 'btn btn-danger btn-xs ajax')
               ->addRemoveOnClick(function () {
                   if ($this->isAjax()) {
                       $this->redrawControl('formArea');
                   }
               }
               );
           $spec = $specs->addDynamic('spec', function (Container $spec) use ($removeEvent){
               $spec->addText('atribute', 'atribut')
                   ->setAttribute('class','form-control');
               $spec->addTextArea('properties', 'podrobnosti')
                   ->setAttribute('class','form-control');
               $spec->addSubmit('remove', 'Smazat')
                   ->setAttribute('class', 'btn btn-danger btn-xs ajax')
                   ->addRemoveOnClick(function () {
                       if ($this->isAjax()) {
                           $this->redrawControl('formArea');
                       }
                   });
           }, 1);
           $spec->addSubmit('ad', 'Přidat')
               ->setAttribute('class', 'btn btn-primary btn-sm ajax')
               ->setValidationScope(FALSE)
               ->onClick[] = [$this, 'AddSpec'];
       }, 1);


       $specs->addSubmit('add', 'Přidat')
           ->setAttribute('class', 'btn btn-primary btn-sm ajax')
           ->setValidationScope(FALSE)
           ->onClick[] = [$this, 'AddSpecs'];
public function AddSpecs(SubmitButton $button)
   {
       $button->parent->createOne();
       if ($this->isAjax()) {
           $this->redrawControl('formArea');

       }
   }

   public function AddSpec(SubmitButton $button)
   {
       $button->parent->createOne();
       if ($this->isAjax()) {
           $this->redrawControl('formArea');
       }
   }

Zde je výřez formuláře s problémovou částí

{snippet formArea}
	<form n:name="addProduct" class="form-horizontal">
		<div class="form-group">
			<strong class="offset-2 pb-2">Specifikace</strong>
			<div class="row">
				{foreach $form['specs']->getContainers() as $id => $specs}
					{if $id == 0}{else} <div class="col-sm-2"></div>{/if}
					<label class="col-sm-2 control-label">Specifikace</label>
					<div class="col-sm-8">
						<input n:name="specs-$id-name" type="text" class="form-control">
					</div>
					<div class="col-sm-2">
						{if $id == 0} {input specs-add} {else} <input n:if="$id != 0" n:name="specs-$id-remove" > {/if}
					</div>

					{foreach $form['specs']->getContainers() as $id_spec => $spec}
						<label class="col-sm-2 control-label">Atribut</label>
						<div class="col-sm-8">
							<input n:name="specs-$id-spec-$id_spec-atribute" type="text" class="form-control">
						</div>
						<div class="col-sm-2">
							{if $id == 0} <input n:name="specs-$id-spec-ad"> {else} <input n:if="$id != 0" n:name="specs-$id-spec-$id_spec-remove" > {/if}
						</div>
						<label class="col-sm-2 control-label">Podrobnosti</label>
						<div class="col-sm-8">
							<textarea n:name="specs-$id-spec-$id_spec-properties" class="form-control"></textarea>
						</div>
					{/foreach}
				{/foreach}
			</div>
		</div>
	</form>
{/snippet}

Problém je v tom že když kliknu na button „<input n:name="specs-$id-spec-ad“>„, tak se nic nestane. A když kliknu na první button "<input n:name="specs-$id-name“ type=„text“ class=„form-control“>", tak se nejdřív přidají pole z kontejneru $spec a potom kontejner $specs, ale k tomu ještě 2× kontejner $spec.

Při automatickém vykreslení je vše v pořádku. Kontroloval jsem i vykreslené názvy buttonu a jsou stejné v obou případech vykreslení, proto nevím v čem by už mohl být problém.

Děkuji za každou pomoc.