Vykonani JavaScriptu po updatu snippetu

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
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)