Ziskani obsahu komponenty ajaxem, vice stejnych snippetu
- Pirozek
- Člen | 11
Ahoj,
potrebuju poradit, jestli uvazuju spravnym smerem. Snazim se vyrobit system,
ktery ma „okenka“ (takova ta soupaci vec co ma v pravem hornim rohu krizek)
a kazde okenko je jina komponenta. Obsah okynek se musi tahat AJAXem (to je
podminka).
Do ted jsem to delal tak, ze sablonka pro okenko vypadala nejak takhle:
<?php
{snippet okenko}
blablabla...
{/snippet}
?>
A v okamziku, kdy jsem chtel obsah okynka, tak jsem zavolal AJAXem
?do=okynko-render
, coz zavolalo moji metodu
handleRender
, ktera vypada nejak takhle:
<?php
function handleRender()
{
$this->invalidateControl('okynko'); //tady by se vlastne ani nemusel zadavat nazev, staci to nechat prazdne a efekt bude stejny
$this->template->invalid = $this->isControlInvalid('okynko');
}
?>
a nasledne se mi vratil kus JSONu se snippetem, coz uz samo nette.ajax.js
updatnulo. A vsechno bylo ruzove a zalite sluncem. Jenze pak jsem potreboval
otevrit dvakrat stejne okenko. Ouha, update snippetu probiha tak, ze Nette
vyrobi placeholder v podobe divu, ktery ma ID slozene z
snippet-komponenta-signal
. No jo, ale ja tam potrebuju dve stejna
okenka, coz vyusti ve vytvoreni dvou divu se stejnym ID. Coz je samozrejme
neprijatelne.
Tak jsem se snazil problem vyresit tak, ze proste v handleRender
zavolam metodu render
, ktera dela tohle:
<?php
public function render()
{
$template = $this->template;
$template->setFile(__DIR__ . '/Okynko.latte');
$template->render();
}
?>
Jenze vysledkem je potom neco takoveho:
<?php
Tohle je okenko s nejakym textem :)
<br />
{"state":[],"snippets":{"snippet--flashes":""}}
?>
A muj problem je, ze tam nechci ten JSON :) Jak takovou vec resit? Predpokladam, ze na to asi koukam spatne a ze Nette na to ma nejake udelatko, jak vykreslit dve stejne komponenty na obrazovku, ale pritom aby kazda mela unikatni ID. Tohle reseni co tu mam se mi libi, jen odstranit ten JSON. Pokud to takhle nepujde, tak druhou moznosti je prepsat si tvorbu snippetu a vubec cely ten AJAX handling, ale do toho se mi nechce, radeji bych to jednoduseji.
Co vy na to?
- nanuqcz
- Člen | 822
Ahoj, možná hledáš tohle?
<?php
public function render()
{
$template = $this->template;
$template->setFile(__DIR__ . '/Okynko.latte');
$template->render();
$this->terminate(); //ukončí běh aplikace ještě před posláním JSONu
}
?>
Každopádně kdyby nějak šlo poslat v JSONu jeden snippet vícekrát s jiným ID, zdálo by se mi to jako čistší řešení.