Odeslání parametru comboBoxu – Ajax
- Mariocz
- Člen | 52
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
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
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
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
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
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á.