Zpracování formuláře pomocí AJAXu

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

Zdravím, s Nette teprve začínám a potřebuji udělat formulář, kde po kliknutí na tlačítko se mi pomocí AJAXu překreslí data. V tomto případě jen na zkoušku to, že se mi data vymažou, tedy dá se tam prázdné pole.

Vygenerování stránky v presenteru:

<?php
	 public function renderList(){
    	if(!$this->isAjax()){
			$this->template->advertisements = $this->adv->getAll();
	}
?>

V presenteru mám formulář:

<?php
protected function createComponentAdvForm(){
		$form = new Form;
        $form->getElementPrototype()->class('ajax');

        $form->addText('searchAdv', 'Vyhledat')
             ->setAttribute('style', 'style="padding-left: 5px; display: inline-block;')
             ->setAttribute('size', '20');

        $form->addSubmit('search', 'Vyhledat');

        $form->onSuccess[] = $this->advFormSucceeded;

        return $form;
}
?>

Obslužná metoda pro formulář:

<?php
	public function advFormSucceeded($form, $values)
    {
        $this->template->advertisements = array();
        $this->redrawControl();
    }
?>

Obsah latte souboru:

{snippet advsList}
	{foreach $advertisements as $adv}
		<div class="articlewindow">
			<a n:href="Advertisement:detail $adv->id"><h1>{$adv->name}</h1></a>
		</div>
    {/foreach}
{/snippet}

Používám nette.ajax.js, kde v layoutu volám metodu init:

<script>
	$(function () {
        $.nette.init();
	});
</script>

Díval jsem se i na ostatní příspěvky s podobným tématem, ale nikde jsem nenašel nějakou odpověď. Ani se nezavolá ta obslužná metoda advFormSucceeded.

David Matějka
Moderator | 6445
+
0
-

vytvaris Nette\Application\UI\Form? (a nikoliv jen Nette\Forms\Form)?

Dogtown
Člen | 4
+
0
-

Ano, nahoře v use mám Nette\Application\UI\Form; Zkusil jsem i přímo vytvořit $form = new Nette\Application\UI\Form;

ale výsledek je pořád stejný.

akadlec
Člen | 1326
+
0
-

tak pokud se ti nevola success metoda, tak došlo ve formu k nějaké chybě. Zkusp to prvně ladit bez ajaxu zda se ti vykonává vše a pak jen ajax zapni.

Dogtown
Člen | 4
+
0
-

Zkoušel jsem to bez Ajaxu a to funguje dobře.

Dogtown
Člen | 4
+
0
-

Tak už jsem to „vyřešil“. Asi v tom byla nějaká magie, či co, ale jediné, co stačilo bylo změnit název presenteru. Dříve AdvertisementPresenter, nyní AdvPresenter a vše funguje.