Invalidování části formuláře
- Xchos
- Člen | 40
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
Pokud pouzivas snippet ve formu, musis pouzit nasledujici workaround:
{form newForm}
...
{snippet foo}
{var $_form = $control['newForm']}
a uz to bude fungovat
{/snippet}
{/form}
- akadlec
- Člen | 1326
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.