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
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)