Ajax – překreslení {block content}

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

Ahoj,
snažím se ajaxovým voláním překreslit celý block content, jak to lze efektivně řešit? Používám nette.ajax.js. Redirectu a přenačtení celé stránky se snažím vyhnout. Pomocí snippetů mi to přijde neefektivní. Ajaxovým voláním směřuji do jiného presenteru, ideální by tak bylo zavolat nějaký redraw, který by mi celý content překreslil.

Díky moc!

David Matějka
Moderator | 6445
+
+2
-

Pomocí snippetů mi to přijde neefektivní

proc? od toho ty snippety jsou. Obal snippetem {include #content} v layoutu, prekresli ho a je to.

Mira8
Člen | 36
+
0
-

Zkoušel jsem přes snippety a stále se mi to nedaří :/ Přes odkazy „Detail:show“ se snažím dostat do akce show v presenteru detail, kde by mělo dojít k překreslení snippetu.

{foreach $videos as $v}
   <div class="gallery-photo-container">
       <a class="gallery-photo ajax" title="{$v->title}" n:href="Detail:show" videoId="{$v->id}" data-gallery>
           <img src="{= $v->url_before.$v->img_url|compress}">
       </a>
   </div>
{/foreach}

A v main.js mám ještě:

$('.gallery-photo').on('click', function(e) {
    e.preventDefault();

    $.nette.ajax({
        type: 'GET',
        url: this.href,
        data: {
            value: $(this).closest('a').attr('videoId')
        }
    });
});
	class DetailPresenter extends BasePresenter
{
	public function show() {
        $httpRequest = $this->getHttpRequest();

        if ($httpRequest->isMethod('GET') && array_key_exists('value', $this->params)) {
            if (!$this->isAjax()) {
                $this->redirect('this');
            } else {
                $this->redrawControl('contentVideos');
            }
        }
	}
}

V layoutu mám:

{snippet contentVideos}
    {include content}
{/snippet}

Kde dělám chybu? Už jsem bezradný. Díky!

David Matějka
Moderator | 6445
+
0
-

ta metoda se ma jmenovat renderShow

Xchos
Člen | 40
+
0
-

Dále v šabloně, aby to bylo ajaxem, musíš použít ! signál. {link presenter:action!} nebo totéž v n:makru

Editoval Xchos (10. 7. 2015 6:12)

Oli
Člen | 1215
+
0
-

@Xchos to není pravda. Ajax funguje i na normální odkazy, nemusí to být signál.

Mira8
Člen | 36
+
0
-

Diky za rady, nahradil jsem odkazy {link Detail:show!} a v presenteru prejmenoval na renderShow, ladenka ted hazi error Component with name ‚Detail‘ does not exist. Kde je chyba? Diky

David Matějka
Moderator | 6445
+
0
-

ten signal nepouzivej, pouze prejmenuj tu metodu, jak jsem rikal

Mira8
Člen | 36
+
0
-

i to jsem zkousel, content se opet neprekresli, ladenka error nehlasi, v console tez nic, pouze v network: http://snag.gy/B3ZPb.jpg http://snag.gy/2S6ts.jpg

Mira8
Člen | 36
+
0
-

cache jsem take promazaval

Mira8
Člen | 36
+
0
-

Nikdo nevi v cem by mohl byt problem?

Šaman
Člen | 2666
+
0
-

Problém může být všude možně. Bylo by dobré zkusit si to překreslování na čistém projektu a pokud ti tam nepůjde, tak ukázat kompletní kód. Pokud ti tam půjde, tak hledat co máš jinak.

Xchos
Člen | 40
+
0
-

@Oli děkuju za upozornění, to jsem netušil :)