Odeslání celé šablony přes AJAX a jQuery Mobile
- illagrenan
- Člen | 12
Ahoj,
snažím se zprovoznit mobilní verzi webu pomocí jQuery Mobile.
Knihovna funguje tak, že se po kliknutí na odkaz provede AJAXový požadavek na cílovou stránku a získaná data se vloží do DOMu aktuální stránky.
Problém je v tom, že nette na tento AJAXový požadavek odpoví v response:
{"state":{"lang":null}}
Já bych však potřeboval, aby se vrátil celý kód šablony. Chtěl jsem jít cestou něčeho jako:
use \Nette\Application\Responses\TextResponse
// ...
$this->sendResponse(new TextResponse($this->getTemplate()->render()));
Což vyústí v
Nette\InvalidStateException::Template file name was not specified
.
Díky za jakoukoliv radu ;o)))
- illagrenan
- Člen | 12
Akce a formuláře (ty se v jQuery mobile odesílají automaticky AJAXem) jsem ještě moc neřešil, to bude taky problém.
Jedna možnost je posílat ručně vytvořenou JSON response:
renderXYZ () {
if ($this->isAjax())
$this->sendResponse(new \Nette\Application\Responses\JsonResponse($data));
else
// Normální render šablony....
}
Já bych takhle řešil např. články, které jsou v DB a dá se s nimi tedy takto dynamicky pracovat. Problém je se statickými šablonami… nepřišel jsem na to :-( bohužel.
- ldown
- Člen | 29
Tak jsem nějak vyřešil ten redirect:
Ke kontejneru s attr data-role="page"
jsem přidal
data-url={link this}
který zajistí po redirectu správnou url
(v případě redirectu na jinou stránku než aktuální, je potřeba další
úpravy)
Do BasePresenteru jsem si přidal:
public function noAjaxRedirect($destination, $args = array())
{
$this->sendResponse(new Nette\Application\Responses\RedirectResponse(
$this->createRequest($this, $destination, $args, 'redirect'),
302
));
}
A to volám místo klasického $this->redirect()