Nezobrazují se Flash messages při použití AJAX
- potty
- Člen | 13
Ahoj,
píši svoji první aplikaci podle quickstartu, všechno funguje až na flash messages, který se při použití AJAXu nezobrazí. Postupoval jsem přesně podle quickstartu, invalidaci mám v BasePresenteru v metodě beforeRender. Bez AJAXu fungují v pohodě.
Editoval potty (1. 3. 2012 18:17)
- potty
- Člen | 13
BasePresenter:
<?php
public function beforeRender()
{
if ($this->isAjax()) {
$this->invalidateControl('flashMessages');
}
}
?>
@layout.latte:
{snippet flashMessages}
<div n:foreach="$flashes as $flash" class="flash {$flash->type}">{$flash->message}</div>
{/snippet}
Komponenta PlayerList.php
<?php
public function handleParticipate($trainingId, $playerId, $isParticipate)
{
...
$this->flashMessage('Nastavení uloženo.');
if (!$this->presenter->isAjax()) {
$this->presenter->redirect('this');
} else {
$this->invalidateControl();
}
}
?>
ajax.js:
<script type="text/javascript">
jQuery.ajaxSetup({
cache: false,
dataType: 'json',
success: function (payload) {
if (payload.snippets) {
for (var i in payload.snippets) {
$('#' + i).html(payload.snippets[i]);
}
}
}
});
// odesílání odkazů
$('a.ajax').live('click', function (event) {
event.preventDefault();
$.get(this.href);
});
// odesílání formulářů
$('form.ajax').live('submit', function (event) {
event.preventDefault();
$.post(this.action, $(this).serialize());
});
</script>
Editoval potty (1. 3. 2012 20:51)
- potty
- Člen | 13
Díky za video, podle něj jsem to opravil.
V komponentě místo:
<?php
$this->flashMessage('Nastavení uloženo.');
?>
jsem dal:
<?php
$this->presenter->flashMessage('Nastavení uloženo.');
?>
Ještě k tomu videu (v tomto čase), je použita metoda processChange() a v metodě nad ní je napsáno $this->onChange(); Zkoušel jsem to, ale nic to nedělá. Co přesně tahle metoda znamená? Díky.
- llook
- Člen | 407
Tu metodu má pravděpodobně někde (nejspíš v konstruktoru) zaregistrovanou jako handler události onChange, to se dělá takhle:
$this->onChange[] = callback($this, 'processChange');
Když potom zavoláš $this->onChange()
, tak Nette udělá
kouzlo a zavolá postupně všechny callbacky uložené do pole
$this->onChange
. Popsané je to zde: https://doc.nette.org/…/smartobject#…