Invalidace select boxu formuláře po odeslání – ajax
- MW
- Člen | 626
Zdravím a prosím o radu:
V presenteru mám fomulář s callbackem pro desláni:
function createComponentCompetentPersonsForm($name) {
$form = new Form($this, $name);
$form->getElementPrototype()->class('ajax');
$form->addHidden('contracts_id')->setValue($this->getParameter('id'));
$form->addSelect('users_id', 'Osoba', $this->context->contractsModel->getUsersInverse($this->getParameter('id'))->fetchPairs('id', 'name'));
$form->addText('title', 'Funkce')
->setRequired('Zadejte popis!');
$form->addSubmit('save', 'Přidat')
->getControlPrototype()->class('btn btn-success');
$form->onSuccess[] = callback($this, 'formCompetentPersonsSubmitted');
}
function formCompetentPersonsSubmitted($form) {
$values = $form->values;
try {
$this->context->contractsModel->addCompetentPerson($values);
} catch (\Exception $e) {
$form->addError($e->getMessage());
return;
}
$form->setValues(array(), TRUE);
$this->flashMessage('Osoba byla přidána.');
$this->invalidateControl('persons');
$this->invalidateControl('flash');
}
šablona vypada takto:
{snippet persons}
<h2>Kompetentní osoby</h2><br />
{control competentPersonsForm}
<br />
<fieldset>
<legend>Aktuálně přiřazení</legend>
{foreach $competentPersons as $person}
{$person->name} - {$person->title}
<a n:href="deleteCompetentPerson! c => $person->contracts_id, p => $person->users_id"><span class="glyphicon glyphicon-trash"></span></a><br />
{/foreach}
</fieldset>
{/snippet}
problém je v tom, ze se mě po odeslání formuláře nepřekreslí ten selectbox, který by měl obsahovat o hodnou méně .. vkládám uživatele do pomocné tabulky a v selectu to má nabízet jen ty nevložené.
Přitom ale invalidace proběhne, formulář se vyprázdní, ale select zustane!
Pro mazání mám handle:
function handleDeleteCompetentPerson($c, $p) {
$this->context->contractsModel->deleteCompetentPerson($c,$p);
$this->flashMessage('Osoba odstraněna');
$this->invalidateControl('persons');
$this->invalidateControl('flash');
}
ten ovšem invaliduje i se selectem a v pořádku se obnoví! …
Nevíte prosím, kde může být chyba?
- Pavel Kravčík
- Člen | 1196
Zkusil bych do handle přidat něco jako a pak překresloval:
$form['personForm']['users_id']->setItems($this->context->contractsModel->getUsersInverse($this->getParameter('id'))->fetchPairs('id', 'name')));
- MW
- Člen | 626
Takze toto funguje! Diky !!!
function formCompetentPersonsSubmitted($form) {
...
$this['competentPersonsForm']['users_id']->setItems($this->context->contractsModel->getUsersInverse($this->getParameter('id'))->fetchPairs('id', 'name'));
...
}
Muze me někdo prosím jen vysvetlil, proc ta invalidace v …submitted.. to neprovede a v handle ano?
Editoval MW (16. 2. 2015 15:10)
- Pavel Kravčík
- Člen | 1196
Ona to překreslí, ale ten zdroj (setItems) je stále stejný, takže i výsledek překreslení je stále stejný. Tudíž to vypadá jako nepřekreslené, ale je to překreslené. Takhle to asi chápu já, ale jsem noob, takže těžko říct. :)