render pred vykonanim handle

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

Dobrý den,

mam takový problém, že když ajaxem zavolám handle, kde uložím data přes rest api a pak redrawnu snippet, změny se někdy neprojeví.
Konkrétně mam seznam, kde je poslední položka „nová“ na přidávání. Pokud položku přidám/smažu, zavolá se ajaxem handle, kde se jen pošle přes rest api dotaz a pak se invaliduje snippet obsahujici ten seznam. Když se ajax dokončí, občas se stane že se nepošle nový seznam, ale vyrenderuje se seznam ještě před změnou.
Zkoušel jsem dát do handlu sleep třeba na sekundu před invalidací snippetu, jestli to není chybou databáze, ale to nepomohlo.

Je to jak kdyby se handle dělal paralelně s(/po) renderem místo před a nevím kde mam hledat chybu.

Děkuju za rady

Edit: většinou pokud se to „zasekne“ ale pak smažete další položku, už se to „protrhne“ a funguje to normálně, že se seznam už překresluje správně rovnou dokud se to nerefreshne, nebo nenačte celá stránka znovu.

<?php
public function handleKontaktFirma($zamestnanec, $zakaznik) {
        $res = $this->kontakty->vytvorVazbuFirma($zamestnanec, $this->getContext()->parameters['params']['vazbaTechnikFirmaTag'], explode(":",$zakaznik)[0]);
        $this->template->vazbyList=$this->createFromTechnik($zamestnanec);
        $this->redrawControl("vazby");
 }
?>
<script>
function kontaktFirma(zamestnanec, tis) {
        $.nette.ajax({
            url: {link kontaktFirma!,''=>''} + "&zamestnanec=" + $("#" + zamestnanec).val() + "&zakaznik=" + encodeURIComponent($("#" + tis).val())
        });
    }
</script>

EDIT2: pokud si otevřu 2 okna a v jendom provedu změnu (ta se nepojeví) tak se v druhém po 1. změně projeví obě

Editoval poliak9 (1. 7. 2015 15:37)

David Matějka
Moderator | 6445
+
0
-

ukaz kod

poliak9
Člen | 10
+
0
-

Pridal sem, ale asi to moc nepomuze protoze kod funguje, jen se obcas neprojevi zmeny pred renderem
edit: obcas je kazdy prvni pokus pri nacteni cele stranky

Editoval poliak9 (1. 7. 2015 12:46)

iguana007
Člen | 970
+
0
-

Projdi si ty requesty/responses co se tam na pozadí vykonávájí, třeba tam narazíš na nějakou nesrovnalost – tipuji to na nějaký guláš v životním cyklu presenteru (https://doc.nette.org/…n/presenters#…)

poliak9
Člen | 10
+
0
-

pokud neni request ajax tak se vykoná dobře rovnou na poprvé, ale stejně první po načtení zase nefunguje.
a podle cyklu presenteru by se měly handly vykonat před rendrem, tudíž by tahle chyba nikdy neměla vzniknout

Edit: a adresy požadavků jsou se stejným vstupem totožné

Editoval poliak9 (1. 7. 2015 14:32)

poliak9
Člen | 10
+
0
-

Nakonec byla chyba v invalidaci cache (z databáze) – ta proběhla před handlem a proto se to pak nevykreslilo..Otázkou ale je, proč se to dělo jen při prvním pokusu a při dalších už se to nedělo..