Nepřekresluje se snippet při AJAXové akci

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

Zdravím, protože sem začátečník a asi se bude jednat jen o drobnou chybu, tak jsem dal raději tenhle dotaz do této sekce. Mám problém při zaslání ajaxového požadavku, kdy mažu jeden řádek z tabulky v databázi. Ten se provede správně, ale potom se mi nepřekreslí snippet. Napsal jsem to podle začátečnického návodu, ale i tak mi to nefunguje. Když jsem se podíval na odpověď ve Firebugu, tak nazpátek se mi zaslala odpověď se správným obsahem, jenže se mi to překreslí až potom, co aktualizuji stránku.

Pro AJAX s nette používám soubor jquery.ajax.js

Šablona vypadá takto:

{block content}

...

{snippet}
<table>
    <thead>
    <tr>
	<th>Uživatel</th>
	<th>Email</th>
	<th>Práva</th>
	<th>Smazání</th>
    </tr>
    </thead>
    <tbody>
	{foreach $users as $u}
	<tr>
	    <td>{$u->name} {$u->lastname}</td>
	    <td>{$u->email}</td>
	    <td></td>
	    <td><a n:href="delUser! $u->id" class="ajax">X</a></td>
	</tr>
	{/foreach}
    </tbody>
</table>
{/snippet}
{/block}

a handler pro obsluhu:

public function handleDelUser($id){
	$this->userRepository->deleteUser($id);
	if (!$this->presenter->isAjax()) {
	    $this->presenter->redirect('this');
	} else {
	    $this->invalidateControl();
	}
}

Nevidíte v tom nějakou chybu, kvůli které se to nepřekresluje?
Díky za jakoukoliv radu nebo pomoc.

kubajz
Člen | 47
+
0
-

S $this->invalidateControl() invaliduješ celý presenter, pokud tě dobře chápu, tak potřebuješ překleslit pouze tabulku, čili snippet si nějak pojmenuješ a invaliduješ pouze tento snippet:

...
{snippet table}
<table>
    <thead>
...

a v handleDelUser zavoláš $this->invalidateControl(‚table‘)

serten
Člen | 55
+
0
-

Jo tohle sem taky zkoušel, ale nefungovalo. I když teď už to nějakým způsobem funguje, když sem použil jiný skript pro AJAX s jQuery. Sice mi to už nezobrazuje v URL tu akci, kteoru to provedlo, ale zase se to pořád aktualizuje, nepřijde mi, že by se to provedlo ajaxově. Použil sem skript nette.ajax.js od Vojtěcha Dobeše, ale to mi zase při inicializaci

$(function () {
    $.nette.init();
});

to je v souboru main.js

píše chybu Uncaught TypeError: Cannot call method ‚init‘ of undefined.
Načtení souborů bych měl mít v dobrém pořadí.

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
<script type="text/javascript" src="{$basePath}/js/nette.ajax.js"></script>
<script type="text/javascript" src="{$basePath}/js/main.js"></script>

Nevíte, čím by tohle mohlo být?
Díky za pomoc