Odeslání celé šablony přes AJAX a jQuery Mobile

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

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)))

ldown
Člen | 29
+
0
-

Mám podobný problém. Podařilo se ti to nějak vyřešit?
Taky bude problém s akcemi, kde pak následuje redirect…

illagrenan
Člen | 12
+
0
-

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

Zatím jsem to dočasně vyřešil přes data-ajax=„false“, ale není to tak pěkné

Editoval ldown (2. 12. 2011 15:55)

ldown
Člen | 29
+
0
-

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()