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
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)
- breeta
- Člen | 68
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}