Dynamické přidávání formuláře s Ajaxem

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

Zdravím, mám tuhle část ve formuláři (kdyby/forms-replicator), kterou ale musím načíst ajaxem, našel jsem pár info ale nemůžu to dát dohromady. Pomůže někdo prosím?

    $windows = $form->addDynamic('windows', function (Container $window)   {
            $window->addSelect('size_window', null, $this->getWindow())->setPrompt('Vyberte typ okna')
                ->setAttribute('class', 'selectGlass form-control  image-picker-size-window')
                ->setRequired('Vyplňte typ okna');
            $window->addSubmit('remove', 'Smazat typ okna')
                ->setValidationScope(FALSE)
                ->setAttribute('class', 'btn btn-default')->addRemoveOnClick();
        }, 1 );


        $windows->addSubmit('add', 'Přidat typ okna')
            ->setValidationScope(FALSE)
            ->setAttribute('class', 'btn btn-default')->addCreateOnClick();
 {foreach $form['windows']->containers as  $id => $window}
    <div class="row group">
    <div class="col-xs-12">
    <h3>Typ okna</h3>
   <div  class="form-group">
{input windows-$id-size_window}
   </div>
 <div  class="form-group">
{input windows-$id-remove}
   </div>
    </div>
    </div>
{/foreach}

{input windows-add}

Editoval breeta (17. 8. 2015 15:28)

kleinpetr
Člen | 480
+
0
-

Řeším stejný problém, když použiji snippet tak zaniká proměnná $form uvnitř formuláře. Je možnost předat si proměnnou z presenteru do templaty, ale to se mi zdá takové nehezké. Jak se tedy dá řešit nějak čistě

REPLICATOR A AJAX ? Díky

breeta
Člen | 68
+
0
-

Nakonec jsem to udělal takhle:

presenter

$this->template->form = $this['calWindowForm'];

komponenta


   protected function createComponentCalWindowForm()
    {


 $presenter = $this;
           $invalidateCallback = function () use ($presenter) {
               $presenter->redrawControl('windows');
           };

           $windows = $form->addDynamic('windows', function (Container $window)  use ($invalidateCallback) {
               $window->addSelect('size_window', null, $this->getWindow())->setPrompt('Vyberte typ okna')
                   ->setAttribute('class', 'selectGlass form-control  image-picker-size-window')
                   ->setRequired('Vyplňte typ okna');


               $window->addSubmit('remove', 'Smazat typ okna')
                   ->setValidationScope(FALSE)
                   ->setAttribute('class', 'ajax btn btn-back-black')->addRemoveOnClick($invalidateCallback);
           }, 1 );


           $windows->addSubmit('add', 'Přidat typ okna')
               ->setValidationScope(FALSE)
               ->setAttribute('class', 'ajax btn btn-primary pull-right')->addCreateOnClick($invalidateCallback);

    $form->onSuccess[] = $this->successWindowForm;
        return $form;

    }

šablona

   {form calWindowForm}


{snippet windows}

 {foreach $form['windows']->containers as  $window}
{$window['size_window']->control}
{$window['remove']->control}
{/foreach}

{/snippet}

{$window['add']->control}

{/form}