nette.ajax.js – předání proměnné do template a následný refresh
- kikinet
- Člen | 35
Zdravím,
odesílám formulář ajaxem. V presenteru, na základě hodnot ve formu, předávám proměnnou do template. Na téhle proměnné záleží, co se na stránce ukáže (mohou to být dva odlišné kusy kódu podle hodnoty proměnné). Nicméně po ajaxu se stránka neobnoví stejně jako po odeslání formuláře bez ajaxu.
Jak tedy docílit toho, aby se stránka obnovila, ale bez ztráty vložené proměnné do template?
Zkoušela jsem různé kombinace redrawControl() (což nikdy nedělalo nic) nebo refresh natvrdo pomocí jquery. Ale nic nepomohlo. Je vůbec možné v rámci ajaxu takto vkládat proměnné do template?
Pro jistotu kousek kódu. Presenter:
protected function createComponentSaleForm()
{
$form = $this->saleForm->create();
$form->onSuccess[] = function ($form) {
$this->template->tickets = $this->eventManager->ticketSummary($form->getValues()->json);
//metoda ticketSummary proběhne v pořádku (změny se promítnou v db)
};
return $form;
}
- ParallelUniv3rse
- Člen | 13
kód co chceš znovu překreslit obal do makra {snippet
jmenoSnippetu}{/snippet} a v presenteru na onsucces
$this->redrawControl(„jmenoSnippetu“);
Editoval ParallelUniv3rse (12. 6. 2015 7:51)
- kikinet
- Člen | 35
ParallelUniv3rse napsal(a):
kód co chceš znovu překreslit obal do makra {snippet jmenoSnippetu}{/snippet} a v presenteru na onsucces
$this->redrawControl(„jmenoSnippetu“);
To snad ne! Myslela jsem, že snippet se používá jen pokud chceme překreslit stejný kód (např. fakturu). Příště nebudu myslet a vyzkouším to.
Díky za odpověď :)
- kikinet
- Člen | 35
Narazila jsem ještě na jednu věc. Krom jiného překresluji i formulář (text submit buttonu a hidden input value), nicméně hodnota hidden inputu se nechce změnit. Dělám to takto:
$form->addHidden('buy');
if(empty($_POST['json']) || $_POST['buy'] == 'true') {
$form->addSubmit('submit', 'View summary')
->setAttribute('class', 'ajax');
$form['buy']->setValue('false');
} else {
$form->addSubmit('submit', 'Buy ticket(s)')
->setAttribute('class', 'ajax');
$form['buy']->setValue('true');
}
v presenteru:
{snippet sale}
...
{control saleForm}
{/snippet}
Po odeslání se změní změní název submit buttonu, ale ne hodnota hidden
inputu. Bez ajaxu a snippetu funguje. Přehlížím něco, nebo to touhle cestou
nepůjde?
Zkoušela jsem měnit hodnotu inputu pomocí jquery přímo v template, to ale
vypadá, jako by byl script úplně ignorován.
EDIT: Vyřešeno
Z nějakého důvodu stačilo do snippetu přidat řádek
<script src="{$basePath}/js/nette.ajax.js"></script>
předtím byl mimo něj.
Editoval kikinet (12. 6. 2015 23:45)