Jak aktualizovat celý snippet, který obsahuje dynamické snippety

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
JaxP
Člen | 62
+
0
-

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
+
0
-

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.

Jan Mikeš
Člen | 771
+
+2
-

Myslim ze problem bude v tom, ze tvuj snippet v nazvu obsahuje pomlcku, zkus jej prejmenovat na unitList

Michal Hlávka
Člen | 190
+
0
-

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
+
0
-

@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
+
+2
-

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
+
0
-

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
+
0
-

@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
+
+2
-

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
+
0
-

@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í)