Odeslání parametru comboBoxu – Ajax

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

Ahojte,
trápím se s ajaxem a konečně jsem se dostal k tomu, že se mi snippet překresluje!

Teď bych ale potřeboval signálem poslat proměnnou a nějak jsem se nedohledal jak nato. Konkrétně potřebuji dostat proměnnou key do funkce handleMonthChange vyvolanou změněním comboBoxu.

<script>
$("select.ajax").live("change", function(e) {
        e.preventDefault();
        var key = $(this).val();
        $.get({link monthChanged!});
});
</script>
public function handleMonthChanged($key) {

}
Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Máš dvě možnosti. Buď parametr v PHPčku předej přímo do toho makra, co máš ve skriptu umístěné. Anebo předej parametr přes jQuery:

$.get({link monthChanged!}, {
	key: value
});

K čemu to přesně potřebuješ? Ideální stav je vždycky, pokud se Latte přímo s Javascriptem nemíchá, ale chce to obvykle trošku promyslet návrh… ale nechci působit jako prudič :). Write, refactor, optimize and order matters :).

Mariocz
Člen | 52
+
0
-

Vypisuju kalendář rezervací:
V comboboxu vyberu měsíc a rok např.: prosinec 2012 – value=12/2012
a podle value vytáhnu z DB rezervace a namaluju kalendář.

Je to můj první projekt v nette a s javascriptem jsem taky nepracoval takže v tom celkem dost tápu. Postupuju podle tutoriálů a tam jsem narazil na tenhle způsob.
Kdyby jsi mi mohl poradit ten lepší způsob, rád se přiučím.

Díky Miloš

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Takže je to vlastně miniformulář. Udělal bych to tedy jako klasický formulář, který ve svém zpracování jen přesměruje na tu samou stránku se správnými parametry pro kalendář. A ten formulář bych zajaxoval (a aby se odesílal hned při change události). Ale nedělal bych to separátním signálem, vuyžil bych samotného formuláře.

Mariocz
Člen | 52
+
0
-

Tak to vůbec nemám ponětí co máš na mysli. můžeš naznačit to zaajaxování formuláře?

celé to vypadá takhle

$calendar je jeden string obsahující generované html tabulky.

rezervace.latte

{form selectForm}
    {input months}
{/form}
{snippet snipCalendar}
    {!$calendar}
{/snippet}
<script>
$("select.ajax").live("change", function(e) {
        e.preventDefault();
        var value = $(this).val();
        $.get({link monthChanged!}, { key: value });
});
</script>
Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Použil bych třeba nette.ajax.js . Následně by JS kód vypadal takto:

$.nette.ext({
	load: function () {
		$('select').on('change', function () {
			$(this).closest('form').submit(); // Tohle stručně vyvolá odesílání formuláře, které se ale provede ajaxově kvůli nette.ajax.js
		});
	}
}); // Zaregistrování tohohle kódu jako extenzi zajistí, že není potřeba použít live(), ale bude to tak fungovat
$.nette.init(); // Provede zajaxování všech odkazů a formulářů s CSS třídou ajax

CSS třídu ajax teď musí dostat formulář, naopak ten <select> ji mít nemá.

xxxmisko
Člen | 140
+
0
-

ahoj, robím niečo podobné, mohol by si dať zdroj, kde si také niečo našiel a podľa čoho si postupoval?
Ďakujem