invalidace dynamickych snippetu – ajax se provede jen jednou
- donmoron
- Člen | 6
Zdravim,
podle navodu zde https://doc.nette.org/…mic-snippets
jsem si vytvoril vlastni komponentu ktera je vypisovana ve foreachi a chci
pomoci ajaxu menit stav = (otevreno / zavreno, podobne jako dvere :) takze by to
melo fungovat jako toggle, tzn. ze tam nemam dve metody zavri a
otevri ale jen jednu co se jmenuje
zmenstav
narazil jsem ale na problem, kdy jsem sice priklad zprovoznil, nicmene ajax funguje pro dane volani vzdy jen poprve, a podruhe se stranka uz vzdycky refreshne :(
prisel jsem na to, ze kdyz v handleru zakomentuju metodu invalidateControl tak se handler provede a udela spravne zmenu v DB, jen se komponenta pochopitelne neprekresli. Kazdopadne muzu klikat jak kolikrat chci a zmena se provede presne tolikrat a uz bez refreshe stranky.
Nevim jestli jsem nekde neco neprehledl v dokumentaci, kazdopadne se to chova divne a uz nevim co dal, neresil jste nekdo neco podobneho?
diky moc!
P.S. tady je handler:
public function handleCaseStateUpdate()
{
//.. logika ulozeni do DB....
if ($this->presenter->isAjax()) {
$this->invalidateControl();
} else {
$this->presenter->redirect('this');
}
}
- donmoron
- Člen | 6
Ot@s napsal(a):
Pravděpodobně „nefunguje ajax“ na odkazech, které jsou součástí snippetu. Pokud používáš nette.ajax.js od Vojty Dobeše, tak si někam přidej tento JS:
Diky,
zkusil jsem to, ale hazi mi to tuhle hlasku : „Cannot override already
registered nette-ajax extension ‚load‘.“
zkousel jsem to davat na ruzna mista v sablone, ale bez uspechu. Mozna je to tim ze v JS nejsem prilis kovanej
- Vojtěch Dobeš
- Gold Partner | 1316
Pokud používáš nette.ajax.js, tak kód registrující rozšíření
load
nikam nedávej, protože ta je zaregistrovaná
automaticky.
A nyní nastal čas ukázat všechen JS, který je na stránce, aby se dal problém vyřešit :).
- donmoron
- Člen | 6
A nyní nastal čas ukázat všechen JS, který je na stránce, aby se dal problém vyřešit :).
vse co mam na strance je toto a je to umistene ve footeru:
{block scripts}
<script type="text/javascript" src="{$basePath}/js/jquery.js"></script>
<script type="text/javascript" src="{$basePath}/js/jquery.nette.js"></script>
<script type="text/javascript" src="{$basePath}/js/main.js"></script>
<script type="text/javascript" src="{$basePath}/js/jquery.bgiframe.js"></script>
<script type="text/javascript" src="{$basePath}/js/jquery.suggest.js"></script>
<script type="text/javascript" src="{$basePath}/js/netteForms.js"></script>
<script type="text/javascript" src="{$basePath}/js/nette.ajax.js"></script>
<script type="text/javascript" src="{$basePath}/js/suggestInput.js"></script>
<script type="text/javascript">
$(function () {
$.nette.init();
});
</script>
{/block}
a komponenta co v ni je ajax vypada komplet takhle:
{snippet}
{if $canModify}
<a class="ajax" n:href="caseStateUpdate!">
{/if}
{if $case->caseState == 0}
<img alt="bullet" src="{$basePath}/images/bullets/bullet_ball_glass_red_s.png"/>
{elseif $case->caseState == 1}
<img alt="bullet" src="{$basePath}/images/bullets/bullet_ball_glass_green_s.png"/>
{else}
<img alt="bullet" src="{$basePath}/images/bullets/bullet_ball_glass_yellow_s.png"/>
{/if}
{if $canModify}
</a>
{/if}
{/snippet}
dekuju moc!