Naplnění HTML proměnnými pomocí ajaxu

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
R@da
Člen | 25
+
-1
-

Ahoj,

učím se pracovat s ajaxem v nette a tak jsem si v presenetru vytvořil handleGetItem()

<?php
    public function handleGetItem($id)
    {
        $this->template->itemName = "TEST";
        if ($this->isAjax()) {
            $this->redrawControl('itemDetail');
        }
    }
?>

Dále mám v šabloně snippet itemDetail s HTML obsahující proměnnou itemName a odkaz, který spouští daný handle.

<a n:href="getItem! $item->Id" data-toggle="modal" data-target="#orderModal" class="product-item">

            {snippet itemDetail}
                ...kod k modalnimu oknu #orderModal
                <div class="col-sm-6 col-xs-12 inline-block">
                    <strong class="product-title">{$itemName}</strong>
                    <span class="product-desc">Lorem ipsum</span>
                </div>
                ...
            {/snippet}

Potom ještě inicializaci nette.ajax.js

<script>
$(document).ready(function(){
    $.nette.init();
});
</script>

Po kliknutí na odkaz, se požadavek do handleGetItem správně odešle, ale vrátí se mi JSON a vepíše se mi do toho snippetu. Nejlepší by bylo, kdybych si v handle nadefinoval proměnné a poslal je do šablony, kde by se jenom zobrazily. Jde to nějak jednoduše?
Nebo budu muset z handle posílat json s datama do šablony a tam ho v js zpracovat a přes vložit na správná místa?
Jak to nejlépe udělat?

Předem moc děkuji.

CZechBoY
Člen | 3608
+
+1
-

co ti vadi na prekresleni kusu html? takhle snippety funguji a nikdo si nestezoval…
nebo tobe se vykresli json, ne html, do stranky?

R@da
Člen | 25
+
0
-

Ano, vrátí mi to json: {"state":[],"snippets":{"snippet--itemDetail": "Escapované html"}
Mám tedy odchytit tento json a v js ho vloži na správné místo? Myslel jsem si, že to právě dělá ten snippet.
Diky moc za reakci

R@da
Člen | 25
+
0
-

Z nějakého důvodu se po kliknutí neprovede handle, ale default.
Tracy mi po kliku zobrazí: Front:Homepage:default getItem!. Nemělo by to jít správně na Front:Homepage:getItem! ? Parametr jsem prozatím vyhodil pryč…
Url v odkazu je: /www/?do=getItem
Když jsem zkusil dát do defaultu podmínku isAjax a změnil tu proměnnou ve snippetu, tak se to změnilo. Potřeboval bych ale, aby to probíhalo v handle.

Phalanx
Člen | 310
+
+1
-

Tady máš úplně nejjednodušší příklad od Tomáše Votruby:
https://doc.nette.org/…ication/ajax

  • zkus si to nejdřív bez modalu
  • data by se měli přenačíst sami, v javascriptu s nima pracovat nemusíš (řeší to nette.ajax.js)
  • nech tam jen getItem! – proběhne to vždy přes handle i přes default – to je správné chování
R@da
Člen | 25
+
0
-

Diky moc, přepisovala se mi ta proměnná v defaultu. Myslel jsem že to přes něj vůbec nejde. Jakmile jsem tu proměnnou opodmínkoval, tak se to rozběhlo.
Diky všem :)