Jak na zobrazeni detailu radku v tabulce?

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

Zdravim,
resim jak nejak normalne vypsat tabulku (mam) a po kliknuti na radek pod tim radkem zobrazit detailnejsi informace (z jine komponenty). Nechci natahovat detaily vsech radku najednou.

Budu muset pouzit dynamicky snippety? Jak bych mel takovy snippet invalidovat?

CZechBoY
Člen | 3608
+
0
-

Dobře no, tak jsem teda použil neekonomické vyrenderování celé tabulky při každém požadavku o detaily.

Teď jsem se zasekl na tom jak bych měl dodat javascript komponenty z toho detailu?
struktura komponent:
presenter->tabulka->detail->nějaká další tabulka vyžadující javascript

(vy)řešil to někdo?

Azathoth
Člen | 495
+
0
-

Tohle by se rozhodně mělo dělat přes snippet. Prostě při kliknutí na ten řádek invalidovat snippet s tím řádkem.
A co myslíš tou javascript komponentou z detailu?

CZechBoY
Člen | 3608
+
0
-

@Azathoth No invaliduju celej snippet s tabulkou, se všema řádkama. Pod každým řádkem mám podmínku jestli zrovna potřebuju vypsat ten detail. Takže vždy renderuju jen 1 detail. (mám to přes multiplier)

Zanořená komponenta, která se načte až ajaxem (není při úvodním načtení stránky zobrazená a ani to snad není možný) takže si nevím rady s dodatečným načtením JS. Jestli rovnou vyflushnout javascript do stránky k tomu snippetu?

Teď jsem ještě zjistil další problém – když chci překreslit celou tabulku (kvůli sortování, stránkování, filtrování) tak se mi pošlou jen ty snippety detailů a nepošle se tabulka jako taková.

Aktuální struktura hlavní komponenty

{snippet my_table}
	{control filtry}
	<table>
		// sortování
		{foreach $data as $d}
			<tr>...</tr>
			<tr n:snippet="tableDetails_$d->id">
				<td colspan="{$pocet_sloupcu_zobrazenych_v_tabulce}">
					{if $selectedId === $d->id}
						{control details-$d->id}
					{/if}
				</td>
			</tr>
		{/foreach}
	</table>
	{control paginator}
{/snippet}

btw. jde v multiplieru nějak vyžádat 2 parametry?

return new Multiplier($a, $b) {...};

tohle nefunguje a hleda to komponentu component, potom sub $a a potom sub $b

{control component-$a-$b}

Editoval CZechBoY (6. 3. 2016 2:20)

Azathoth
Člen | 495
+
0
-

A proč neinvaliduješ jen ten snippet s detaily, když zůstává zbytek stejný?
A jestli potřebuješ spustit nějaký javascript po znovunačtení, tak asi nezbývá, než vyslusnout js do té stránky.
O těch dvou parametrem v multiplieru bohužel nic nevím.

CZechBoY
Člen | 3608
+
0
-

A jak bych měl přepsat moje latte abych invalidoval jen ten detail?
zkoušel jsem

$this->redrawControl('tableDetails_' . $detailID);

ale to nepřekreslilo nic :-/

Multiplier jsem znásilnil zanořením do sebe samého.

Azathoth
Člen | 495
+
0
-

Jo, to zanoření do sebe samého je asi jediný rychlý a rozumný způsob.
A u toho ajaxu, zkoušel jsi to nějak debuggovat? Jako jestli to přijde ze serveru, ale nepřekreslí se to v browseru, nebo jestli to ani ten server nepošle?

CZechBoY
Člen | 3608
+
0
-

JSON response je jen state:[], snippety tam nejsou vůbec žádný.
Jako klidně se spokojim s překreslováním všech prázdných detailů, ale to filtrování/řazení/stránkování bych potřeboval rozjet :-S

Azathoth
Člen | 495
+
0
-

Hm, ty máš vnořené snippety, tak to se obávám, že to budeš muset zrefactorovat. Se vnořenými snippety se lidé potýkali už tady https://forum.nette.org/…ymi-snippety a tady https://forum.nette.org/…ace-snippetu
Mělo by ti pomoct buď snippetArea, dynamické snippety a nebo si to všechno rozházet do komponent, abys měl jeden snippet na komponentu https://doc.nette.org/…mic-snippets

CZechBoY
Člen | 3608
+
0
-

Moc nevim jak zrefaktorovat.

Cely to komponenta je. Mam dat kazdejvradek tabulky jako komponentu? A co filtry a razeni?

Snippetarea nevim jestli pomuze, resp me to neudelalo zadnou zmenu.

Mrkni pls nahoru na tu sablonu jak bych to mel prepsat. Dik

Azathoth
Člen | 495
+
+2
-

Já bych zkusil udělat na každý řádek komponentu.
A filtry a řazení budeš dělat normálně, budeš si filtrovat a řadit ty komponenty.

CZechBoY
Člen | 3608
+
0
-

@Azatoth: Ok, taky me to ted napadlo jak si me navedl minule ;-)
To vypada, ze by to mohlo na 100% fungovat :-))
Diky moc.

edit: funguje to :-)

Editoval CZechBoY (6. 3. 2016 15:25)

CZechBoY
Člen | 3608
+
0
-

Tak jsem narazil na to, že se mi nepředává na jaké stránce jsem a teda na jiné než první stránce detaily spadnou.

Obalovací tabulka obsahuje NPaginator paginator, který má svoji page. Dále obsahuje komponentu Paginator.
Struktura komponent k detailu je: obalovaci tabulka > řádek > detail.
Zkoušel jsem v obalovací tabulce dát persistentní parametr $paginator, ale nepředal se. Stránka do paginatoru se nastavuje až při volání render, to je možná ten problém?

Nevěděl by někdo jak tohle vyřešit? Díky