Jak aktualizovat celý snippet, který obsahuje dynamické snippety
- JaxP
- Člen | 62
Dobrý den,
mám jeden obalový snippet a v něm další dynamické snippety. Při změně
dynamických snippetů a následném překreslení, se mi překreslí pouze
aktualizovaný snippet (to je dobře). Ale od chvíle, kdy jsem do snippetu
zavedl dynamické snippety, se mi nedaří aktualizovat snippet jako
takový.
Znázornění:
{snippet unit-list}
{foreach $units as $unit}
<div ... >
<!-- nějaké další elementy -->
</div>
<div n:foreach="$unit->photos as $photo">
{snippet photo-$photo->uid}
<!-- nějaké další elementy -->
{/snippet}
</div>
{/foreach}
{/snippet}
V handlu potřebuji aktualizovat CELÝ snippet
public function accUnitFormSucceded($form) {
// ... magie
// nyní potřebuji překreslit komepletně celý snippet (jelikož v listu přibyla další unit), nic se nestane
$this->redrawControl('unit-list');
}
Budu rád za každou radu
- Michal Hlávka
- Člen | 190
Já si s touhle featurou nevím rady už od začátku co jsem začal s Nette pracovat. Ale takhle, co jsem tady četl, něco mi říká, že by jsi to měl obalit ještě celé jedním snippetem a ten invalidovat a nebo snippetAreau, hodně štěstí, já se s tímhle nasral už mraky času.
- Michal Hlávka
- Člen | 190
Lexi napsal(a):
Myslim ze problem bude v tom, ze tvuj snippet v nazvu obsahuje pomlcku, zkus jej prejmenovat na
unitList
Jak tohle člověk zjistí? Neměla by vyskočit aspoň nějaká vyjímka?
- Jan Mikeš
- Člen | 771
@emptywall pomlcka v nazvu snippetu by mela znamenat, ze snippet je dynamicky a je potreba jej jeste obalit do statickeho snippetu (z dokumentace to nemusi byt uplne jednoznacne).
Mam dojem, ze pokud se v sablone vyskytuje dynamicky snippet, ktery neni obalen do statickeho (nebo do snippetArea), tak je vyhazovana vyjimka.
V dokumentaci je ale napsano toto:
Dynamické snippety nelze invalidovat přímo (invalidace item-1 neudělá vůbec nic), musíte invalidovat jim nadřazený statický snippet
Je mozne, ze @JaxP ma vyse uvedeny kod obalen jeste v dalsim snippetu, ale snazi se invalidovat ten dynamicky, coz dle dokumentace neudela prave vubec nic.
Edit: vyzkousel jsem, a latte vyjimku pri neobaleni dynamickeho snippetu nevyhazuje, ale opravdu se nemuzu zbavit pocitu, ze jsem na ni nekdy narazil, mozna v drivejsich verzich nette
Editoval Lexi (2. 9. 2016 11:18)
- David Matějka
- Moderator | 6445
Pomlcka v nazvu snippetu nevadi (respektive mohlo by to teoreticky pri prekreslovani v JS zpusobit problemy v pripade, ze by existovaly nejake zanorene komponenty).
V tomhle pripade je opravdu nutne obalit to dalsim, statickym snippetem
- JaxP
- Člen | 62
Děkuji za odpovědi. V případě invalidace dynamického snippetu invalidu snippet nad ním (tedy zmíněný unit-list) a tím překreslím pouze „změněný“ dynamický snippet uvnitř „unit-list“. S názvem bez pomlčky žádná změna.
@DavidMatějka Po obalení v dalším snippetu funguje a lze překreslit i snippet jako takový :). Děkuju.
Ještě trochu otázka bokem – jaký zápis názvu je zde „korektní“? Má rozdíl „unit-list“ a „unitList“ vliv na funkčnost? Z pohledu HTML (jelikož se snippet vloží jako ID elementu) mi připadá korektní zapisovat jako „unit-list“.
@Lexi v kódu právě uvádím většinu snippetů s pomlčkou a prozatím bez problému (až na tento, kde smazání pomlčky nic nezměnilo :))
Editoval JaxP (2. 9. 2016 12:10)
- Jan Mikeš
- Člen | 771
@JaxP zvlastni, pokud jsi jak v sablone tak v presenteru prepsal
unit-list
na unitList
a ani presto se dynamicky
snippet neprekresli, pak musi byt jeste chyba nekde jinde – vyzkousel jsem si
to na svem projektu a funguje.
Kazdopadne staticke snippety s pomlckou jsou pro me novinka, diky za rozsireni obzoru :-).
- David Matějka
- Moderator | 6445
Má rozdíl „unit-list“ a „unitList“ vliv na funkčnost?
Jediny problem, ktery me napada, je, ze bys mel jednu komponentu, ktera by mela v sobe snippet unit-list a pod touto komponentou bys mel komponentu unit je snippetem list. pak by se to asi nejak mlatilo
- JaxP
- Člen | 62
@Lexi ted nevím, jestli se úplně chápem. :) Jednalo se právě o překreslení statického snippetu. Každopádně obě varianty „obalujícího“ statického snippetu fungují jak pro normální překreslení tak pro překreslení „dětí“ ala dynamických snippetů.
@DavidMatějka takže tu přeci jen nějaká situace může nastat. Tzn. držet se tak, že statické se jmenují bez pomlčky a dynamické s pomlčkou :)
Děkuji všem za ujasnění)