Invalidování části formuláře

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

Ahoj

Popis funkce:
Mám takový problém ohledně formuláře. Využívám komponentu Kdyby/Replicator pro formulář, abych mohl udělat pro novinku možnost rozřazení do více kategorií. To se mi povedlo, avšak se mi nelíbí znovu-načtení celé stránky při přidání nové položky v addDynamic(). Proto jsem si vymyslel, že využiji ajax a formulář budu invalidovat. Tady nastala past. Využívám CKeditor

Problém:
Při invalidování celého formuláře se promázne kvůli CKeditoru hodnota textarea, která je obsažena ve formuláři. Proto při invalidování se textarea jeví prázdná i když před ajax požadavkem a před invalidací v ní byli napsány data – ale CKeditor je nepředal, jelikož si je ukládá někam do své instance a nejspíše je do textarea zapíše až při submit.

Dotaz:
Není nějaká možnost udělat invalidaci pouze na replikátor, tedy na addDynamic() ? Napadl mě manuální rendering, ale když jsem v makru {form} použil {snippet}, tak uvnitř snippetu neexistuje $form pro replikátor.

Presenter:

public function createComponentNewForm(){
        $form = $this->NewsNewEditForm->create();

        $categories = $form->addDynamic('categories', function (Container $container) {
            $container->addSelect('categories_id', 'Kategorie:', $this->model->categories->getCategories())
                      ->setAttribute("class", "form-control")
                      ->setAttribute("style", "width: 250px;");
        }, 1);

        $categories->addSubmit('add', 'Přidat kategorii')
          ->setAttribute('class', 'ajax')
          ->setValidationScope(FALSE)
          ->onClick[] = callback($this, 'newFormAddElementClicked');


		    $form["submit"]->onClick[] = callback($this, "onNewFormResponse");
        return $form;
    }
David Matějka
Moderator | 6445
+
+2
-

Pokud pouzivas snippet ve formu, musis pouzit nasledujici workaround:

{form newForm}
	...
	{snippet foo}
		{var $_form = $control['newForm']}
		a uz to bude fungovat
	{/snippet}
{/form}
Xchos
Člen | 40
+
0
-

Děkuju za rychlou odpověď.

akadlec
Člen | 1326
+
+1
-

Jen bych doplnil k tomu CKEditoru…pokud to funguje identicky jako TinyMCE tak na to tam jsou události, na jednom projektu jsem to úspěšně používal tak že když se vyvolala ajax událost pro uložení nebo nějakou práci s formem tak se zavolala metoda TinyMCE která provedla předání dat z editoru do textarey. Pokud došlo k překreslení textarey kde byl editor tak se zase zavolal init editoru a vše bylo ok.