Jak poslat snippet komponenty, která je součástí json response?
- CZechBoY
- Člen | 3608
Zdravím,
řešil jste někdo problém jak odeslat pouze snippet komponenty, která je
příjemcem signálu, pokud odesílám vyrenderovaná data pomocí
jsonu? $presenter->sendJson($json_s_komponentami)
Kod presenteru zhruba takto:
function actionXXX($id)
{
$this->data = $this->sezenData($id);
}
function renderXXX($id)
{
$jsonData = [];
foreach ($data as $d) {
ob_start();
$this['komponentaA-' . $d->id]->render();
$text = ob_get_clean();
$jsonData[] = zpracujDataDoJson($text);
}
$this->sendJson($jsonData);
}
function createComponentKomponentaA()
{
return new Multiplier(function($id) {
return $this->factoryA->create($id);
});
}
Potom v komponentě A mám subkomponentu, která už vypisuje data. Na ni jen deleguju render:
function render ()
{
$this['komponentaB']->render();
}
V komponentě B mám konečně komponentu C, která přijímá signál update!:
function handleUpdate()
{
$this->redrawControl('snippet');
}
Editoval CZechBoY (17. 2. 2016 8:58)
- srigi
- Nette Blogger | 558
Riesil som nieco podobne. Bohuzial poslat JSON pomocou
sendJson()
a zaroven invalidovat snippety nie je mozne. Je za to
zodpovedny tento
kod.
Pri invalidacii sa posiela TextResponse
, pri
sendJson/sendPayload
sa posiela JsonResponse
a vdaka
tomu cez hentu podmienku neprejdes.
- CZechBoY
- Člen | 3608
Zkusil jsem ještě pohackovat přes parametr do
, který se
posílá. Ten parametr (bez signálu) si předám do šablony
{layout ""}
{control $redrawControlName}
a zkoušim vykreslit samostatně bez odesílání ajaxu.
Aktuálně jsem na problému, že odesílám http header ikdyž už mám data
v bufferu (nastavení content-type:application/json).