Jak zavolat signál s parametry javascriptem

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

Potřebuju ajaxově překreslit jeden snippet a k tomu je nutné zavolat handle s parametry, přičemž hodnoty mám v javascriptových proměnných.

public function handleGetUserInfo($userId, $from, $to)
{
    $this->template->userInfo = $this->userRepository->getUserInfo($userId, $from, $to);
    $this->redrawControl("userInfo");
}
{snippet userInfo}
    {foreach $userInfo as $i}
        ...
    {/foreach}
{/snippet}

Jak to udělat?

Dřív jsem to dělal třeba tak, že jsem si připravil neviditelný odkaz:

<a n:href="getUserInfo!" class="ajax dn"></a>

a javascriptem jsem mu přidal do href parametry a pak javascriptem na ten odkaz kliknul. Ale to už teď nejde – stane se to, že se celá stránka znova načte místo toho, aby se to udělalo ajaxově.

Když si celý odkaz připravím i s parametry, tak ajax funguje:

<a n:href="getUserInfo! userId => 1, from => '2015-01-01', to => '2015-02-02'" class="ajax dn"></a>

jenže já potřebuju ty parametry plnit javascriptem.

Nedokázal jsem to zjistit z dokumentace a ani na fóru jsem to nenašel.

jiri.pudil
Nette Blogger | 1032
+
+2
-

Pošli si ten ajaxový request ručně:

$.nette.ajax({
	url: {link getUserInfo!},
	data: {
		userId: userId,
		from: from,
		to: to
	}
});
H0w4rd
Člen | 96
+
0
-

No jo, jenze ja chci prekreslit snippet.

H0w4rd
Člen | 96
+
0
-

Přišel jsem na způsob, jak to udělat, ale také to nebude moc čisté řešení :)

Vytvořil jsem si formulář s třídou ajax přes {control userInfo} a metodu createComponentUserInfo(), který obsahuje 3 hidden políčka.

Tato 3 hidden políčka naplní javascript a formulář odešle.

V onSuccess[] metodě je

<?php
$this->template->userInfo = $this->userRepository->getUserInfo($userId, $from, $to);
$this->redrawControl("userInfo");
?>

a snippet se mi překreslí. Doufám, že mi to časem zase nepřestane fungovat podobně jako mi už nefunguje náhrada parametrů v hrefu u skrytého odkazu.

Přece to ale musí jít řešit nějak lépe, nebo ne?

Editoval H0w4rd (1. 4. 2015 22:24)

David Matějka
Moderator | 6445
+
0
-

Takhle se ti snippet prekresli.

H0w4rd
Člen | 96
+
0
-

Aha, zajimave. Ale kdybych udelal $.ajax, tak se samozrejme neprekresli, ze?

David Matějka
Moderator | 6445
+
0
-

Presne tak, volat to pres $.nette.ajax je klicove :)