Vykonani JavaScriptu po updatu snippetu

před 10 lety

peci1
Člen | 60
+
0
-

Ahoj, potreboval jsem po updatu snippetu odscrollovat stranku dolu. Na jednoduchou cestu, jak to se stavajicimi nastroji udelat, jsem neprisel, a tak jsem si upravil jquery.nette.js nasledovne:

<script>
jQuery.extend({
    nette: {
        updateSnippet: function (id, data, afterLoad) {
                    $("#" + id).fadeOut("fast", function () {
                        $(this).html(data).fadeIn("fast", function() {
                            jQuery.nette.afterLoad(afterLoad)
                            });
                    });
        },
        success: function (payload) {
            // redirect
            if (payload.redirect) {
                window.location.href = payload.redirect;
                return;
            }

            // snippets
            if (payload.snippets) {
                for (var i in payload.snippets) {
                    jQuery.nette.updateSnippet(i, payload.snippets[i], payload.afterLoad);
                }
            }
        },
        afterLoad: function (functions) {
        if (!functions)
                return;

            if (functions.scrollDown) {
                window.scrollBy(0,50000);
            }
            if (functions.focus) {
                $("#" + functions.focus).focus();
            }
        }

    }
});
</script>

a v presenteru pak staci nastavovat

<?php
$this->payload->afterLoad->scrollDown = TRUE;
$this->payload->afterLoad->focus = ...;
?>

(kvuli strict standards vyjimce je treba v basepresenteru ve startup zavolat)

<?php
$this->payload->afterLoad = new StdClass();
?>

Kdybyste to nekdo potreboval, muzete to pouzit. Vim, ze to neni optimalni, je to takovej hotfix, ale funguje. Co by se dalo vylepsit, je, aby slo nastavit tyto funkce pro kazdy snippet zvlast, ale zatim nemam potrebu ani cas.


edit:
asi nebude nejlepsi vytvaret afterLoad v basepresenteru, ted mi to rozhodilo preview v texyle… Tak je treba si ho vytvorit rucne

Editoval peci1 (6. 10. 2009 11:51)