Dynamické snippety ve 2.0stable – prosím o ukázku

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Ot@s
Backer | 476
+
0
-

Poprosím zkušenější část komunity o funkční ukázku dynam. snipettů ve 2.0stable. Tj. použití např. {snippet radek-"$index"} pro jednotlivé řádky tabulky či odstavců v latté šabloně + ukázku invalidace (oněch radek-"$index") v presenteru. Děkuji.

OK3
Člen | 91
+
0
-

Nebylo by něco v tomhle videu? https://www.youtube.com/watch?…

Editoval OK3 (6. 2. 2012 16:42)

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Pokusím se krátce shrnout co vím, ale doufám, že nešířím bludy.

Dynamické snippety fungují uvnitř statických snippetů. Příklad:

{snippet container}

	{foreach $items as $id} {* $items === [a, b, c] *}
		{snippet item-$id}
			Something
		{/snippet}
	{/foreach}

{/snippet}

Při invalidaci je třeba invalidovat onen statický kontejner. To bohužel způsobí, že se zinvalidují všechny dynamické snippety, a taky se všechny skutečně pošlou do payloadu (v payloadu však nepřibyde položka snippet--container, pouze jednotlivé snippet--item-a atd., což je dobře :) !). Příklad:

$this->invalidateControl('container');

Aby se odeslala skutečně jen konkrétní položka (řádek tabulky apod., prostě jeden dynamický snippet), je třeba (alespoň já bych to tak asi udělal), nějak ovlivnit pole $items, na kterém se iteruje. Tedy při AJAXovém požadavku do něj umístit jen jednu položku ⇒ jeden dynamický snippet ⇒ jedna položka v payload.

if ($this->isAjax()) {
	$this->template->items = array($this->getParam('id')); // eg. $this->getParam('id') === 'a'
} else {
	$this->template->items = array('a', 'b', 'c');
}

Editoval vojtech.dobes (6. 2. 2012 17:39)

Ot@s
Backer | 476
+
0
-

Díky Vojto, potvrdil jsi mi to, k čemu jsem +/- dospěl sám. Člověk už je z Nette tak rozpáslý, že když se něco nedělá „samo“, tak je z toho celý poplašený a znejistí. :-)

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

:) Snad brzy vyjde 2.1 a v ní tato úprava: https://github.com/…tte/pull/501