Předání ajaxového parametru komponentě

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

Zdravim, chtěl jsem si trochu zkrášlit kód a vyčlenit rezervační kalendář z prezenteru a šablony do samostatné komponenty.
Ve chvíli kdy jsem vše přesunul do nově vytvořené komponenty a tu pak vložil na správné místo mi ale přestalo fungovat ajaxové překreslovaní kalendáře. Konkrétně se xhr požadavek zavolá ale parametr do handleru nedorazí, resp. proměnná má hodnotu null takže se to zasekne uvnitř handleru.

xhr url (v parametru hodnota 5/2013)
http://localhost/janovickyNette/www/homepage/rezervace?do=clientRezervation-monthChanged&key=5%2F2013

template komponenty

<div class="rezervation-combobox">
    <p>
    {form selectForm}
        {input months}
    {/form}
    </p>
</div>
<p>
    {snippet snipCalendar}
        {!$calendar}
    {/snippet}
</p>

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

Handler

public function handleMonthChanged($key) {
        $data = explode("/", $key);
        $this->month = (int) $data[0];
        $this->year = (int) $data[1];
        $calendar =new Calendar($this->month, $this->year, $this->db);
        $this->template->calendar = $calendar->getHtmlCalendar();
        $this->invalidateControl('snipCalendar');
    }
Ot@s
Backer | 476
+
0
-

Kde a jak generuješ odkaz s …&key=5%2F2013? Buď ho generuješ ručně a nebo v presenteru. Přesuň jeho generování do (šablony) komponenty. Pak jeho tvar bude …&clientRezervation-key=5%2F2013 a bude to fungovat.

Mariocz
Člen | 52
+
0
-

link generuju v šabloně komponenty v javascriptu (události vyvolané při změně checkboxu)

kód je uvedený v úvodní příspěvku. Mohl by jsi mi prosím poradit jak to upravit aby to šlapalo? Když bylo tohle přímo v šabloně presenteru, fungovalo to jak mělo.

Ot@s
Backer | 476
+
0
-

Mariocz napsal(a):

link generuju v šabloně komponenty v javascriptu (události vyvolané při změně checkboxu)

kód je uvedený v úvodní příspěvku. Mohl by jsi mi prosím poradit jak to upravit aby to šlapalo? Když bylo tohle přímo v šabloně presenteru, fungovalo to jak mělo.

{ key: value } musí být { 'clientRezervation-key': value }, tj. do šablony komponenty si přidej $template->name = $this->name a v JS šablony uprav řádek $.get({link monthChanged!}, { {$name}-key: value });.

Mariocz
Člen | 52
+
0
-

Teď jsem to moc nepochopil. Když změním JS tak jak jsi napsal s proměnnou $name, xhr se vůbec nepošle.
Naopak když řádek vyměním za tohle:{ key: value } musí být { ‚clientRezervation-key‘: value } xhr se provede úspěšně ale neinvaliduje se snippet.

Ot@s
Backer | 476
+
0
-

Mariocz napsal(a):

Teď jsem to moc nepochopil. Když změním JS tak jak jsi napsal s proměnnou $name, xhr se vůbec nepošle.
Naopak když řádek vyměním za tohle:{ key: value } musí být { ‚clientRezervation-key‘: value } xhr se provede úspěšně ale neinvaliduje se snippet.

Ten handler je špatný (k reklamaci invalidace). Myslel jsem, že Ti to dojde. To samé s „xhr se vůbec nepošle“ (případnou chybu JS snad odhalíš a opravíš). Chtěl jsem, aby Ti došlo, proč parametr key v presenteru funguje a v komponentě ne…

Mariocz
Člen | 52
+
0
-

Jo už mi to došlo jak jsi to myslel a funguje mi to. Díky moc