Ziskani obsahu komponenty ajaxem, vice stejnych snippetu

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

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

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í.

Pirozek
Člen | 11
+
0
-

Diky, nakonec jsem to vyresil staromodnim die() a funguje to skvele. Jasne no, bylo by to lepsi reseni, ale pokud bude tohle fungovat, tak to preziju :)