Vynucené vrácení HTML pro AJAX request
- besir
- Člen | 170
Ahoj,
chtěl sem se zeptat, jak se dá pro ajax request resp. jQuery volání fce load vynutit vrácení
HTML obsahu.
Konkrétně jde o to, že používám twitter bootstrap a potřebuji do modálního okna načíst HTML obsah z adresy která je mířená na akci presenteru. Jenže do něj se mi vrátí jen prázdné snippety, resp. „{"state“:[]}„. Zkoušel jsem si vynutit vrácení obsahu Templaty přes $this->sendTemplate(); , ale setkal jsem se jen s odpovědí “{}".
Díky za tip
- ViPEr*CZ*
- Člen | 817
Já třeba ajax v Nette používám tak, že když třeba zavolám funkci jQuery load(…);, tak load předám vygenerovaný odkaz v šabloně (přes plink nebo link). V presenteru bych si pak sestavil šablonu a zavolám metodu render nad šablonou a terminate() (pokud jde o akci či view presenteru, tak ani terminate není třeba).
- besir
- Člen | 170
**@ViPEr*CZ*** No stejnou úvahu sem měl právě i já, ale neznámo proč se mi to chová tak že prostě pošle JSON Response.
Nicméně, dalším bádáním a díky Tvému nakopnutí jsem přišel na to, že toto funguje:
/**
* Info render
* @author Petr Besir Horáček <sirbesir@gmail.com>
*/
public function renderInfo()
{
if($this->isAjax())
{
$this->getTemplate()->setFile(__DIR__.'/../templates/User/info.latte');
$this->getTemplate()->render();
$this->terminate();
}
}
… ale proč sakra musim nastavit šablonu? Vzhledm k tomu, že se mi nikde nezobrazí, ani do logu neuloží vyjímka tak nevim jakou se snaží načíst když tam není $this->getTemplate()->setFile(…);
- ViPEr*CZ*
- Člen | 817
Udělal bych to ještě takto:
public function renderInfo()
{
if($this->isAjax())
{
$this->getTemplate()->setFile(__DIR__.'/../templates/User/info.latte');
$this->getTemplate()->render();
$this->terminate();
} else
$this->terminate();
}
A navíc pokud jsi v této metodě, tak se automaticky nastaví info.latte ve složce pro aktuální presenter. Takže setFile je pak k ničemu. A pokud obsah v info neobalíš do bloku, který se includuje do @layout.latte, pak ani render a následný terminate v tomto případě není potřeba. Ten v tom else jo, aby v případě, že se na to koukneš neajaxově, došlo k přerušení a vrácení prázdného výstupu.
Editoval ViPEr*CZ* (23. 1. 2013 15:00)
- ViPEr*CZ*
- Člen | 817
besir napsal(a):
No jde o to, že teoreticky sem si to myslel take, prakticky to bez setFile(), render() a terminate() vrati jen „{"state“:[]}“.
Proste se to nevim proč i přesto že je to render chová jak handle metoda, ale payload je prazdny.
No asi furt používáte snipety ne?
- besir
- Člen | 170
ViPErCZ napsal(a):
besir napsal(a):
No jde o to, že teoreticky sem si to myslel take, prakticky to bez setFile(), render() a terminate() vrati jen „{"state“:[]}“.
Proste se to nevim proč i přesto že je to render chová jak handle metoda, ale payload je prazdny.
No asi furt používáte snipety ne?
- nevykej mi prosím :D
- nepoužívám, resp. v té aplikaci ano, ale né v tomto místě… ten render má a na neajaxové volání vrátí výsledek bez @layoutu
- besir
- Člen | 170
Tak jako v tý šabloně je prostě na zkoušku jen tohle:
<strong>Fooo</strong>
A v akci to co je výš. Ted mě tak napadá, že eště musim vyřešit to když se to nebude volat ajaxově aby se připojila template. Ale to udělám druhou neajaxovou akcí a vložím do ní šablonu pro ajax. Pač {block content} asi neoIfuju :D