Neinvalidace komponenty, prázdná odpověď

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
thunderbuff
Člen | 164
+
0
-

Ahoj, v aplikaci (Nette 2.1 RC) potřebuji po kliknutí na odkaz v komponentě tuto komponentu překreslit a místo odkazu vykreslit novinky z blogu.

Pokud nepoužívám ajax, komponenta se překreslí správně. Pokud použiji ajax, komponenta se nepřekreslí, v odpovědi serveru nejsou aktualizovaná data. Kde je problém?

Komponenta:

<?php

	public function handleLoadBlogNews() {
		$this->template->news = $this->xmlFeedReader->getEntries($this->feedURL);
		Debugger::log('toto se v pořádku zalogje i při ajaxu');
		$this->invalidateControl();
	}

	public function render() {
		$this->template->setFile(__DIR__ . '/blogNews.latte');
		$this->template->render();
	}

?>

Šablona:

<div class="alert alert-info">
	<h4>Latest blog entries</h4>
	<div n:if="!isset($news)">
		<a n:href="loadBlogNews!" class="ajax">load</a>
	</div>
	<div n:ifset="$news">
		{$news}
	</div>
</div>

Po kliknutí na odkaz mi ajaxem přijde odpověď bez invalidovaných dat:

{"state":[]}

Pokud v presenteru zkusím přímo v actionMetodě zavolat invalidate, odpověď je stejná.

<?php

$this['blogNews']->invalidateControl();

// pokud invaliduji celý presenter přes $this->invalidateControl(), komponenta se invaliduje, ale s ní i všechny otatní.

?>
Aurielle
Člen | 1281
+
0
-

Nikde tam nevidím definici snippetu…

thunderbuff
Člen | 164
+
0
-

Snipetem to funguje, ale pokud jsem dobře pochopil dokumentaci, komponenta by měla jít překreslit i bez snippetu.

//EDIT: tak jsem to přečetl pořádně a níže jsem se dočetl, že snippet být opravdu musí. Díky za nakopnutí :-)

Editoval thunderbuff (14. 9. 2014 13:59)

bazo
Člen | 620
+
0
-

daj ten snippet do komponenty, potom ti bude fungovat $this[‚component‘]->redrawControl()