Invalidace select boxu formuláře po odeslání – ajax

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

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
+
0
-

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
+
0
-

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
+
+1
-

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. :)