Nepřekreslení snippetu na select boxu
- Johny12369
- Člen | 21
Zdravím, mám podobný problém jako zde:
https://forum.nette.org/…luje-snippet
po změně výběru v select boxu překresluji obsah jiného select boxu,
akorát se mi snippet neaktualizuje.
Latte soubor
<form class="df-checkout">
...
<select n:href="getHraci!" name="domaci" id="domaci" class="form-control">
<option value="">Vybrat</option>
<option n:foreach="$tymy as $tym" value="{$tym->getId()}">
{$tym->getNazev()}
</option>
</select>
...
<div class="row helpers hidden">
<select n:snippet="hraciDomaci" class="form-goly-domaci-select form-control">
<option></option>
<option n:foreach="$hraciDomaci as $hrac" value="{$hrac->getId()}">
{$hrac->getPrijmeni()} {$hrac->getJmeno()}
</option>
</select>
<input type="text" class="form-goly-input form-control">
</div>
</form>
JS soubor
<script>
$(document).ready(function(){
$("#domaci").bind('change', function() {
var link = $(this).attr("href");
$.nette.ajax ({
url: link,
data: {"strana": "domaci", "tymId": $(this).val()},
type: 'get',
dataType:'json'
});
});
});
</script>
Controller
<?php
public function handleGetHraci($strana, $tymId)
{
$tym = $this->tymManager->getTymRepository()->find($tymId);
$muzstvo = $this->tymManager->getMuzstvoRepository()->findBy(["nazev" => self::HLAVNI_TYM]);
$hraci = $this->hracManager->getHracRepository()
->findBy(["tym" => $tym, "muzstvo" => $muzstvo], ["prijmeni" => "ASC", "jmeno" => "ASC"]);
if($this->isAjax()){
$this->template->hraciDomaci = $hraci;
$this->redrawControl('hraciDomaci');
}
?>
Formulář zatím nemám vytvořený a zpracovaný, takže první select box
mám udělaný takto provizorně a select box se snippetem je na formuláři
nezávislý. Ten využívám ke kopírování.
JS zavolá handler správně a když si dumpnu
$this->template->hraciDomaci před redrawControl tak tam
data jsou, ale redrawControl pak už neudělá nic, přitom se na
stránce ve spodní Tracy liště přidá nový řádek s tímto procesem.
Chybu mi to nevyhazuje, v debuggeru má proces
(zapasy-new?do=getHraci&strana=domaci&tymId=12) status 200,
akorát response obsahuje:
{"state":[],"snippets":{"snippet--hraciDomaci":"\t\t\t\t\t\t\t\t\t\t<option></option>\n"}}
a po tomto procesu se mi ještě vytvoří další proces zapasy-new?_tracy_bar=content-ajax.070337af20&XDEBUG_SESSION_STOP=1&v=0.09143314314688511 s response:
Tracy.Debug.loadAjax(...)
Zkoušel jsem místo $.nette.ajax použít i $.get, obalit
<form> do snippetArea a tento kód mám normálně v
{block content}
, takže by ani snippetArea neměla být potřeba.
nette.ajax.js s inicializací předem $.nette.init();
mám taky.
Díky moc za jakoukoliv radu.
Editoval Johny12369 (5. 9. 2018 14:29)
- Johny12369
- Člen | 21
Odpovím si sám, byl problém v tom, že jsem si tu danou proměnnou, která se updatovala snippetem, setoval v render* metodě na prázdné pole (abych při úvodním načtení stránky nemusel řešit existenci proměnné).