Odkaz na handle po překreslení snippetu

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

Zdravím, snažím se udělat „aplikaci“ na evidenci řekněme pro zaměstnance. Má podobu kalendáře s tím že je zobrazen vždy jeden měsíc a úkoly se zapisují do jednotlivých dní.
Měsíce se přepínají pomocí linků na kterých je navěšen handle a ajaxově překreslí celou stránku včetně odkazů na jiné měsíce. Problém mám, když se provede nějaká akce např. smazání úkolu. Po úspěšném smazání úkolu dojde ke stejnému překreslení celé stránky, aby úkol zmizel z kalendáře ale to mi poté rozbije odkazy na měsíce.
odkaz před provedením akce:

<a class="ajax" href="/dochazka/www/?year=2016&amp;month=12&amp;do=showMonth">12</a>

odkaz po provedením akce:

<a class="ajax" href="/dochazka/www/calendar-delete-event?year=2016&amp;month=12&amp;id=43&amp;do=showMonth">12</a>

Latte:

<div n:snippet="calendar">
	<ul class="pagination pagination-sm">
		{for $i = 1; $i <= 12; $i++}
			{if $calendarData->month === $i}
				<li class="active"><a>{$i}</a></li>
			{else}
				<li><a class="ajax" n:href="showMonth! ,$calendarData->year,$i">{$i}</a></li>
			{/if}
		{/for}
	</ul>
	<div id="calendar-body">
		{foreach .......... }
			<a n:href="deleteEvent,$event->id" class="ajax delete-event" title="smazat záznam">
			    <i class="fa fa-trash-o"></i>
		    </a>
		{/foreach}
	</div>
</div>

Presenter:

<?php
public function renderDefault () {
	$this->template->calendarData = $this->model->getCalendar();
}

public function handleShowMonth ( $year, $month ) {
	$this->template->calendarData = $this->model->getCalendar($year, $month);
	    if($this->isAjax()) {
	        $this->redrawControl('calendar');
	    }
}

public function actionDeleteEvent( $id ) {
    $eventData = $this->model->getEventData($id);
    $result = $this->model->deleteEvent( $id );
    if ( $result ){
        $this->template->calendarData = $this->model->getCalendar($eventData->year,$eventData->month);
        $this->setView('default');
        $this->redrawControl('calendar');
    }
}
?>

Když vyměním handle za action, tak se toto neděje. Je mi jasné, že tam mám soustu chyb protože se teprve učím bastlit metodou pokus omyl, ale co dělám spatně v tomto případě?
Díky

CZechBoY
Člen | 3608
+
0
-

Přesměruj místo přenastavení view

public function actionDeleteEvent( $id ) {
    $eventData = $this->model->getEventData($id);
    $result = $this->model->deleteEvent( $id );
    if ( $result ){
        $this->template->calendarData = $this->model->getCalendar($eventData->year,$eventData->month);
		$this->redirect('default');
    }
}

Editoval CZechBoY (18. 12. 2016 19:02)

majk118
Člen | 4
+
0
-

No to mám v té podmínce $this->isAjax(), kterou jsem u této funkce nenapsal, protože mě zajímá jak to udělat ajaxem.

CZechBoY
Člen | 3608
+
0
-

Z akce udělej handle.

majk118
Člen | 4
+
0
-

OK, to taky jde. Napadlo mě udělat z handle akci ale takto ne. Dobrá a mám se snažit pochopit proč to tak je? Nebo to tak prostě je? 😊. Díky

CZechBoY
Člen | 3608
+
+1
-

No protože ty přejdeš na akci deleteEvent a potom se vygenerujou odkazy this na tu akci a ne na které právě jsi. Pokud použiješ handle tak se použije akce na které opravdu právě jsi (nebo na kterou jde ten http požadavek..).

majk118
Člen | 4
+
0
-

Díky moc