Problem s AJAXem
- Dj_Oggy
- Člen | 67
Zdravim, zacal jsem si hrat s AJAXem a narazil jsem na jisty problem.
Pouzivam knihovnu jquery, livequery a jquery.nette z fifteen prikladu.
Mam vytvorenou kontrolu pro vypisovani seznamu
{snippet actionlist}
<table>
<tr>
<th>Datum</th>
<th>Název akce</th>
<th>Popis akce</th>
</tr>
{foreach $items as $item}
<tr class="akce">
<td>{$item['day']}</td>
<td>{$item['name']}</td>
<td>{$item['desc']}</td>
</tr>
<tr id="akce{$iterator->getCounter()}info" class="info" >
<td colspan="3" style="text-align: center;">rozsirene info</td>
</tr>
{/foreach}
</table>
<script type="text/javascript">
var isVisible = false;
$("tr.info").hide();
$("tr.akce").livequery('click', function(event){
if (isVisible) {
$("#akce1info").fadeOut("fast");
isVisible = false;
} else {
$("#akce1info").fadeIn("slow");
isVisible = true;
}
});
</script>
{/snippet}
a v defaultu mam
{block #content}
@{control actionlist}
<a href="{link actionlist:refresh!}" id="refresh" class="ajax">Klikni</a>
{/block}
(pouzivam @layout.phtml).
Nyní v php controly mam tento kod
public function setData($data)
{
$this->data = $data;
}
public function render()
{
$template = $this->template;
$template->setFile(dirname(__FILE__). '/ActionlistControl.phtml');
$template->items = $this->data;
$template->render();
}
public function handleRefresh()
{
if ($this->isAjax())
$this->setData(array(
array("id" => 0, "day" => 1, "name" => "newskolni game", "desc" => "for fun"),
array("id" => 1, "day" => 2, "name" => "newskolni game2", "desc" => "for fun2")
));
}
a v php defaultu mam
protected function createComponentActionlist()
{
$actionList = new ActionlistControl();
$actionList->setData(array(
array("id" => 0, "day" => 1, "name" => "skolni game", "desc" => "for fun"),
array("id" => 1, "day" => 2, "name" => "skolni game2", "desc" => "for fun2")
));
return $actionList;
}
A nyni mam 2 hlavni problemy:
1, Pri pouziti zavinace se mi totalne rozhodi stranka, a to tak, ze snippet je uplne navrhu kodu stranky i pred head apod.
2, Pri kliknuti na „klikni“ odkaz bych chtel, aby se mi nacetla druha sada radku, ktere tam jsou definovane, ale porad se mi tam objevuje jedna a ta sama. Tipuju to na zivotni cyklus renderovani, kde mi asi neco uniklo.
Diky za rady.
Editoval Dj_Oggy (27. 8. 2009 18:27)
- Panda
- Člen | 569
Zkusil bych toto:
@{block #content}
@{control actionlist}
<a href="{link actionlist:refresh!}" id="refresh" class="ajax">Klikni</a>
@{/block}
V layoutu zavináč ponechat.
Jinak jsem se taky trochu snažil odpovědět tématem Zavináčová magie v praxi.
Editoval Panda (27. 8. 2009 19:44)
- Dj_Oggy
- Člen | 67
Tak nakonec jsem to zprovoznil.
Musel jsem v handleRefresh
zrusit kontrolu isAjax(), protoze tahle
metoda neexistovala a proto server vracel kod 500 (prisel sem na to tak, ze jsem
zrusil ajaxovateni a ladenka uz sama rvala).
A nakonec toho handleRefresh
jsem dal invalidovani a vse uz
funguje, jak ma.
Editoval Dj_Oggy (27. 8. 2009 20:44)