Ajaxová změna hodnot ve formuláři a problém s jeho odesláním

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

Omlouvám se za možná už opakující se téma, nicméně jsem doposud nenalezl odpověď.

Mám formulář, kterému při určité události ajaxově měním hodnoty. Bohužel jsou tyto hodnoty ignorovány v okamžiku odeslání formuláře, kdy jsou přepsány původními (řekněme defaultní) hodnotami formuláře. Je to dáno obsahem funkce actionEditaceDodavatelu() viz. níže. Přesunem jejího obsahu do renderEditaceDodavatelu se vyřadí ajaxové změny hodnot, jelikož jsou vzápětí přepsány právě touto metodou, a vymazání dělá ještě větší neplechu.

Předpokládám, že na vině je mimo jiné i špatně umístěný setvalues() (v komponentě) spolu s umístěním komeponenty ve snippetu (v šabloně).

<?php
    public function actionEditaceDodavatelu() {
        $this->row = $this->getService('model')->getFirmy()->order('zkrnaz')->limit(1);
        $this->template->row = $this->row;
    }

    public function handleDFirma($x) {
        $this->row = $this->getService('model')->getFirmy()->where("id", $x);
        $this->template->row = $this->row;
        if ($this->isAjax()) {
            $this->invalidateControl('pokus');
            $this->invalidateControl('formular');
        }
    }

    public function renderEditaceDodavatelu() {
        $this->template->firmy = $this->firmy->order('zkrnaz');
    }

    protected function createComponentDodavatele($name) {
        $form = new Form($this, $name);

        // prvky formuláře
	// ...

        $form->addSubmit('save', 'Uložit');
        $form->addSubmit('cancel', 'Storno')->setValidationScope(false);
        $form->onSuccess[] = callback($this, 'dodavateleSubmitted');

        if ($this->row !== NULL) {
            foreach ($this->row as $radek) {
                $form->setValues($radek);
            }
        }

        return $form;
    }
?>

'{snippet formular}{form dodavatele}

manuálně vyrenderovaný formulář

{/form dodavatele}{/snippet}'

Napadá někoho, co dělám špatně? Jak mám správně měnit hodnoty formuláře případně jak zamezit tomu přepisování na původní hodnoty, aniž bych neodepsal ajax?

Předem děkuji a Vaše reakce.

Nox
Člen | 378
+
0
-

Snad neřeknu blbost, ale co zkusit nad if ($this->row !== ... dát if( $form->isSubmitted() === false )

Editoval Nox (14. 9. 2011 21:26)

castamir
Člen | 629
+
0
-

Výborně! Podle všeho to funguje jak má!

Děkuji ó Velectěný!