nette.ajax.js snippets afterQueue nefunguje

Jigs
Člen | 14
+
0
-

Ahojte,

mám následující kód, který bych chtěl vykonat po překreslení snippetů.

$.nette.ext('snippets').after(function ($el) {
        if ($el.is("#snippet-budgetItems-modalForm-unitPrice")) {
            confirm('test');

            console.log(unitPriceHtmlEl.val());
            console.log(quantityHtmlEl.val());

            let total = quantityHtmlEl.val() * unitPriceHtmlEl.val();
            totalHtmlEl.val(total)
        }
    });

Nicméně ať zkouším cokoli, tak se mi stále tento kód provádí PŘED překreslením snippetů.

Díky confirm('test'); jsem si zastavil vykonávání kódu a zjistil, že v tu chvíli ještě není snippet překreslen.

Koukal jsem se do nette.ajax.js a nevidím důvod, proč by se to mělo volat předtím.

Zkoušel jsem odstranit if, aby se to vykonávalo vždy, ale stejně mi to provede vždy předtím.
Zkoušel jsem i after vyměnit za complete, before, nic nezabírá.

Díky předem za odpovědi :-).

duke
Člen | 650
+
0
-

Ujisti se, že se ti provádí aktuální skript, a ne jeho starší verze uložená v cachi prohlížeče.

Jigs
Člen | 14
+
0
-

Bohužel se provádí správná verze. Nicméně problém bude asi vyloženě v překreslování snippetů.

Pokud přidám takovýto event:

$(document).on("change", unitPriceHtmlEl, function () {
    let total = quantityHtmlEl.val() * unitPriceHtmlEl.val();
    totalHtmlEl.val(total)
});

Tak je výsledek úplně stejný.

Nicméně pokud místo ajaxu zavolám unitPriceHtmlEl.val(500);, tak dosáhnu požadovaného výsledku.

Moc nechápu, jak se mi „change“ event může zavolat dříve, než se snippet překreslí.

Editoval Jigs (9. 4. 2019 15:51)

Jigs
Člen | 14
+
0
-

Tak moje chyba. Doplatil jsem na svoji neznalost. Chtěl jsem si ušetřit práci, a tak jsem si uložil elemnty formu následovně:

let productHtmlEl = $('#' + {$control['editForm']['product']->htmlId});

Takže když jsem pak chtěl val() tohoto elementu, tak se používala původní hodnota a ne nová po překreslení snippetem.