Jak se v kódu odkázat na snippet
- svobodai
- Člen | 136
Na formuláři mám snippet, který se správně vykreslí
v latte je tento kód
{form $form}
<dt>{label userinterpret /}</dt> <dd>{input userinterpret}</dd>
{snippet userFilter}
{var $_form = $form}
<dt>{label interpret /}</dt> <dd>{input interpret}</dd>
{include #js}
{/snippet}
{/form}
když se podívám na vygenerovaný html kód tak ho tam vidím
<dt>
<label for="frm-filterForm-userinterpret">Jméno uživatele</label></dt>
<dd><select name="userinterpret" id="frm-filterForm-userinterpret">
<option value="4044" selected="">Option 1</option>
<option value="4636">Option 2</option>
<option value="5145">Option 3</option></select>
</dd>
<div id="snippet-grid-filter-userFilter">
<dt><label for="frm-filterForm-interpret">Umělec/soubor</label></dt>
<dd><select name="interpret" id="frm-filterForm-interpret">
<option value="4044" selected="">Option1_1</option></select>
</dd>
<script type="text/javascript">
$('#frm-filterForm-interpret').on('change', function (event) {
$.ajax({
type: 'GET',
url: '/?do=userChange',
data: {
'userinterpret': $('#frm-filterForm-userinterpret').val(),
}
});
});
</script>
</div>
PHP pro ten handle.
public function handleUserChange($userinterpret, $interpret, $years) {
if ($userinterpret) {
$interpretSelect = $this->getInterpretSelect($userinterpret);
$interprets = $interpretSelect->fetchPairs('Id', 'Name');
$interpretKod = array_keys($interprets);
$this['filterForm']['interpret']
->setItems($interprets);
} else {
$this['filterForm']['interpret']->setPrompt('Vyberte nejdříve umělce')
->setItems(array());
}
$this['grid']['filter']['userFilter']->redrawControl();
}
Když se ten hande vyvolá, tak skončí chybou
Component with name ‚userFilter‘ does not exist.
Když ten poslední řádek upravím
$this['grid']['filter']->redrawControl('userFilter');
tak k chybě nedojde, ale snippet se nepřekreslí.
Jak mám zavolat to překreslení snippetu, aby se opravdu překreslil.
Editoval svobodai (24. 11. 2014 12:55)
- David Matějka
- Moderator | 6445
Nemas tam totiz callback, ktery by to zpracoval. Pokud pouzivas nette.ajax.js, volej
$.nette.ajax({....})
namisto toho $.ajax
a provede se to spravne
- svobodai
- Člen | 136
V tom problém není. Používám jquery.nette.js
Takže ten zápis mám dobře. Ostatně ten callback se zavolá, ale skončí
buď chybou, že neexistuje komponenta, nebo se vlastně nevrátí v JSON
odpovědi to co se má překreslit.
Jde mi vlastně o to jak PHP dotlačit k tomu aby v JSON předalo pod
grid-filter-userFilter to čím se to má překreslit, když mi
to nevyhodí chybu, tak se to v JSON odpovědi stejně neobjeví.
- Jiří Nápravník
- Člen | 710
Nemáš
{form form}
…
{snippet}
{/snippet}
…
{/form}
?
Pokud ano, tak je to taková nemilá vlastnost. Dej tedy tam, dke tvoříš formulář tohle: $this->template->__form = $form;
- svobodai
- Člen | 136
Jiří Nápravník napsal(a):
Nemáš
{form form}
…
{snippet}
{/snippet}
…
{/form}?
Pokud ano, tak je to taková nemilá vlastnost. Dej tedy tam, dke tvoříš formulář tohle: $this->template->__form = $form;
Mám tam {form $form} a při tvorbě formuláře mám $this->template->form = $form;
- svobodai
- Člen | 136
matej21 napsal(a):
co se vraci v response ze serveru?
V JSON je vidět, že se vrátí toto
{"state":
{"ajax":null,
"grid-ordering-settings":{"ordering":{"BroadcastName":"ASC"}},
"grid-translator-settings":null,
"grid-export-settings":null,
"grid-filter-settings":{"userinterpret":"4044","interpret":"4044","years":"2013"},
"grid-pager-number":null,
"grid-pager-settings":{"page":"3"}
}
}