Snippet se nejspíš nepřekresluje
- kudlajz
- Člen | 70
Zdravím.
Používám tento jQuery kód:
(function poll() {
setTimeout(function() {
$.ajax({
url: "/u/?do=refreshSidebar",
dataType: "json",
complete: poll
});
}, 2000);
})();
Zajišťuje, aby se každé 2 sekundy volala metoda handleRefreshSidebar(), která vypadá takhle:
public function handleRefreshSidebar()
{
$this->invalidateControl("messageBox");
}
Část šablony, která se má překreslovat, vypadá takhle:
{snippet messageBox}
<a n:href="Messages:" id="messageBox">
<span>{$new_messages}</span><br/>{_}new conversations!{/_}
</a>
{/snippet}
A metoda, která template plní onou hodnotou $new_messages je tady:
$this->template->new_messages = $this->conversationsModel->getNewMessages($this->user->id);
Zkoušel jsem ji volat jak v beforeRender, tak v afterRender, ale bez
požadovaného efektu.
Cílem je, aby se snippet překresloval v určitém intervalu (což zajišťuje
obslužný JS výše) a pokud se objeví nové konverzace, tak by se měl
vrátit jejich počet pomocí výše uvedené metody.
Poradí mi někdo? Díky.
- Majkl578
- Moderator | 1364
$.ajax nahraď za $.nette.ajax. Předpokládám, že používáš nette.ajax.js od Vojty Dobeše, pokud ne, začni. :)
- kudlajz
- Člen | 70
Tak jsem se s tím setkal znovu. Mám výpis komentářu v snippetu „comments“, formulář pro přidání v „commentForm“, ale po odeslání ajaxově se neprovede překreslení ani jednoho snippetu, přitom v handle je to jasně uvedené. Ani když si otevřu Nástroje pro vývojáře a otevřu si response, tak tam není ani jeden snippet :-/ Šablonu samozřejmě plním v render metodě. Jiné snippety se překreslují v pořádku.
Editoval kudlajz (23. 1. 2013 21:12)