Předání dat do šablony po ajaxovém zpracování
- LmErs
- Člen | 3
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
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)