addDynamic neposílá vyplněná data ke zpracování
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Oli
- Člen | 1215
Ahoj,
mám takovej zajímavej problém. Nevím jestli jsem něco neřehlédl, ale peru
se s tím už pěknou chvilku. Mám replicator (addDynamic) v komponentě a
všechno funguje uplně normálně až na to, že addDynamic neposílá
změněná data do metody ke zpracování. Pole mimo addDynamic se pošlou
normálně. AddDynamic pošle null popřípadě jestli jsou data v tabulce tak
data z tabulky. Pokud ale změním input, tak nepošle změnu, ale data
z vykreslení.
public function createComponentForm()
{
$form = new Form();
$self = $this;
$invalidateCallback = function () use ($self) {
$self->invalidateControl('timeslot');
};
$replicator = $form->addDynamic('timeslots', function (Container $timeslot) use ($invalidateCallback)
{
$timeslot->addHidden('id');
$timeslot->addSelect('day', 'Výběr dne v týdnu', array(
'nic', 'Pondělí', 'úterý', 'středa', 'Čtvrtek', 'Pátek', 'Sobota', 'Neděle'
));
$timeslot->addText('timeFrom', 'Čas od:', 5, 5)
->setAttribute('class', 'input-small timepicker');
$timeslot->addText('timeTo', 'Čas do:', 5, 5)
->setAttribute('class', 'input-small timepicker');
$timeslot->addText('note', 'Poznámka:', 100, 300)
->setAttribute('class', 'input-xxlarge');
// Odstraní konkrétní dynamický "formulář"
$timeslot->addSubmit('remove', 'Smazat')
->setAttribute('class', 'ajax')
->addRemoveOnClick($invalidateCallback);
}, 0);
$replicator->addSubmit('add', '+')
->setAttribute('class', 'ajax')
->addCreateOnClick($invalidateCallback);
$form->addSubmit('send', 'Uložit');
$form->onSuccess[] = callback($this, "process");
return $form;
}
public function process(Form $form)
{
if ($form->submitted->name == 'send')
{
foreach ($form['timeslots']->values as $timeslot)
{
dump($timeslot);
$timeslotArray = array (
'day' => $timeslot->day,
'time_from' => $timeslot->timeFrom,
'time_to' => $timeslot->timeTo,
'note' => $timeslot->note
);
dump($timeslotArray);
$lastInsert = $this->timeslotModel->editOrAdd($timeslot->id, $timeslotArray);
}
exit();
$presenter->redirect(":admin:Clubs:");
}
}
Šablona
{snippet timeslot}
{form form class =>"well form-vertical"}
{foreach $form['timeslots']->containers as $id => $timeslot}
{input timeslots-$id-id}
{label timeslots-$id-day /}
{input timeslots-$id-day}
{label timeslots-$id-timeFrom /}
{input timeslots-$id-timeFrom}
{label timeslots-$id-timeTo /}
{input timeslots-$id-timeTo}
{label timeslots-$id-note /}
{input timeslots-$id-note}
{input timeslots-$id-remove}
{/foreach}
<br />
{input $form['timeslots']['add']}
{input send}
{/form}
{/snippet}
Nějáký nápad, co jsem udělal blbě? Uplně stejně (akorát v presenteru) to používám v jiném projektu a tam to jde bez problému. Je problém v tom, že to je v komponentě?
Díky.