Předání dat do šablony po ajaxovém zpracování

LmErs
Člen | 3
+
0
-

Ahoj, omlouvám se za začátečnický dotaz, ale nějak jsem se na tom sekl a nemohu se pohnout.

Mám úplně jenoduchý formulář

protected function createComponentSearchFromChatForm()
    {
        $form = new Nette\Application\UI\Form();
        $form->setHtmlAttribute('class', 'ajax');
        $form->addText('text', 'text');
        $form->addProtection();
        $form->addSubmit('send', 'Vyhledat');

        $form->onSuccess[] = function ($form, $values) {
            $this->template->searchFromChatResults = 'data here1';

            // Invalidace snippetu
            if ($this->isAjax()) {
                $this->payload->postGet = TRUE;
                $this->redrawControl('searchInChat');
            }
        };

        return $form;
    }

a k němu úplně jednoduchou šablonu

<div class="modal-body">
   {control searchFromChatForm}

   {snippet searchInChat}
      {ifset $searchFromChatResults}{$searchFromChatResults}{/ifset}
   {/snippet}

</div>

Celý problém je v tom, že potřebuji data z formuláře po odeslání zpracovat, odeslat do šablony proměnnou s daty a překreslit snippet. Formulář se korektně ajaxem odešle, dojde ke zpracování v isAjax() bloku ale do šablony se proměnná neodešle. Nevíte někdo, proč to tak je nebo jak jinak tuhle situaci řešit? Pro ajax používám knihovnu Naja. Jiné věci, které jsou ajaxové a jsou řešeny pomocí handle metod, tak ty fungují správně. Nejspíš jsem tu moc nepochopil, jak funguje to odeslání dat u formulářů :(.

Mockrát děkuji za případnou odpověď a nakopnutí

Infanticide0
Člen | 103
+
0
-

Tvůj kód mi funguje, ale asi potřebuješ něco jinýho. Chceš data vracet ve snippetu nebo jako hodnotu v response pro další zpracování javascriptem?
->template->x proměnnou použije Latte k vygenerování kusu šablony (HTML), který pak předá do hodnoty snippetu v response.
response:

<script>
{
    "postGet": true, // $this->payload->postGet = true
    "state": [],
    "snippets": {
        "snippet--searchInChat": "\n      results: alzpxq2ygj\n   " // $this->redrawControl('searchInChat');
    }
}
</script>

já změnil jen řádek

$this->template->searchFromChatResults = 'results: ' . Random::generate();

abych viděl, že se hodnoty mění s každým ajax odesláním.

Editoval Infanticide0 (26. 1. 17:27)