Ajax překreslování dvou prvků na jedné stránce
- petr_malek
- Člen | 5
Ahoj všem,
mám na webu výpis dat z databáze u kterého je zapnuté stránkování
s data-ajax-append. Celé je to tedy zabalené ve snippetu.
Na stejné stránce mám ale také kontaktní formulář, u kterého když při
chybě vyvolám $this>redrawControl('contactform');
tak se
překreslí i horní výpis z databáze a přidá to ty stejné položky
které již ve výpisu jsou kvůli již zmíněnému appendu. Je tedy prosím
nějaká možnost, jak toto omezit? Cílem je, ať se vypíše chybová hláška
u kontaktního formuláře, ale výpis dat z databáze zůstane tak jak je,
ale poté ať stránkování funguje tak jak má.
Díky
- petr_malek
- Člen | 5
Polki napsal(a):
Možná mít zvlášť snippet pro výpis a zvlášť pro formulář?
a pak redrawovat jen to, co je třeba.
Tak to teď mám samozřejmě. Data z databáze jsou zabalena do jednoho snippetu a formulář do druhého. Při chybě v ve formuláři dávám redraw pouze na formulář. V ten moment se ale přepíšou i data z databáze a append přidá vše znovu..
- petr_malek
- Člen | 5
Polki napsal(a):
To by nemělo, pokud opravdu invaliduješ jen snippet formuláře, protože tím pádem Nette do payload vygeneruje jen ten obsah formu, takže se nemá co přidat…
Můžeš se mrknout na to, co server vrací, jestli vrací opravdu jen obsah Form snippetu?
Omlouvám se, ale teď tomu moc nerozumím :( Jak jsem již psal dříve,
při chybě ve formuláři mám v kódu
$this->redrawControl('contactform');
a snippet v šabloně je
pouze na formuláři. I když v šabloně odeberu snippet pro formulář, data
se stejně obnoví. Ten redraw mi tedy obnoví celou šablonu a proto i ty
data :(
V kódu mám toto:
protected function createComponentContactForm()
{
$form = $this->contactForm->create();
$form->onSuccess[] = function (UI\Form $form) {
$this->flashMessage("Úspěšné odeslání");
$this->redrawControl('contactform');
};
$form->onError[] = function (UI\Form $form) {
if ($this->presenter->isAjax()) {
$this->redrawControl('contactform');
}
};
return $form;
}
V šabloně pak toto:
{snippet contactform}
{control contactForm}
{/snippet}
Vždy se obnoví i data která jsou mimo form. Ajax překreslí celou šablonu a vypíše data znovu :(
- petr_malek
- Člen | 5
Michal Kumžák napsal(a):
A formulář odesíláš ajaxově?
Pokud je tím myšleno zda mám na formuláři class=„ajax“ tak ano.
- Polki
- Člen | 553
To, že máš ve formuláři třídu ajax neznamená, že se ajaxově odesílá. Stejně tak, že máš v error handleru formu nastaveno překreslování formu neznamená, že někde jinde nemáš nastaveno překreslování i zbytku atd. atd.
Možná by to chtělo začít se základy a ne se rovnou vrhnout na Nette.
:)
Pokud chceš dělat weby, tak bych si udělal nějakou statickou HTML stránku
pro začátek a zjistil si, co je HTTP request, response, stavové kódy atp. No
a pak se posunout výše. :)