Problem s AJAXem

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

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)

Dj_Oggy
Člen | 67
+
0
-

Prvni problem jsem vyresil zavinacovou magii. Odebral jsem zavinac pred widget a vlozil ho pred block v @layoutu. Tim se mi spravilo to vykreslovani.

Ale druhy problem stale zustava a pri pouziti firebugu vraci server 500 – server error

Panda
Člen | 569
+
0
-

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
+
0
-

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)