Ajax překreslování dvou prvků na jedné stránce

petr_malek
Člen | 5
+
0
-

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

Polki
Člen | 553
+
0
-

Možná mít zvlášť snippet pro výpis a zvlášť pro formulář?
a pak redrawovat jen to, co je třeba.

petr_malek
Člen | 5
+
0
-

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

Polki
Člen | 553
+
0
-

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?

petr_malek
Člen | 5
+
0
-

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 :(

Michal Kumžák
Člen | 106
+
0
-

A formulář odesíláš ajaxově?

petr_malek
Člen | 5
+
0
-

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

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