ResponseText mixuje celou stránku a state, triviální úkol nefunguje
- Zax
- Člen | 370
Zdravím,
zkouším různé experimenty s komponentami a z nějakého důvodu mi nefunguje tak triviální věc, jako je překreslení snippetu při kliknutí na odkaz na signál komponenty. ResponseText vypadá takto:
<!DOCTYPE HTML><html lang="cs">(celá stránka)</html>{"state":{"testControl-view":null,"testControl-randomValue":"42"}}
Komponenta má tento kód:
namespace Components;
use Nette,
Nette\Application\UI;
class TestControl extends UI\Control {
/** @persistent */
public $view = 'Default';
/** @persistent */
public $randomValue = 'no value';
protected function redraw() {
if($this->presenter->isAjax()) {
//dump('RedrawControl');
$this->redrawControl('snip');
} else {
$this->redirect('this');
}
}
public function handleSetView($view) {
$this->view = $view;
$this->redraw();
}
public function handleRandom() {
$this->randomValue = rand(0,100);
$this->redraw();
}
public function render() {
$this->template->setFile(__DIR__ . DIRECTORY_SEPARATOR . $this->view . '.latte');
$this->template->randomValue = $this->randomValue;
$this->template->render();
}
}
Šablony vypadají takto:
# Default.latte
{layout './@layout.latte'}
{block view}
TestControl-default({$randomValue})
{/block}
# Special.latte
{layout './@layout.latte'}
{block view}
TestControl-special({$randomValue})
{/block}
# @layout.latte
{snippet snip}
{include #view}
{/snippet}
<a n:href="random!" class="ajax">random</a>
<a n:href="setView! Default" class="ajax">default</a>
<a n:href="setView! Special" class="ajax">special</a>
Samozřejmě načítám nejdřív jQuery a poté nette.ajax.js. Inicializuji takto:
$(document).ready(function() {
$.nette.ext('ajaxHandler',{
success: function(payload) {
console.log('Incoming payload!');
console.log(payload);
},
error: function(jqXHR, status, error) {
console.log('Ajax failed!');
console.log(error);
console.log(jqXHR);
}
});
$.nette.init();
});
Když v prohlížeči vypnu JS, tak se mi správně přenáší stav v URL a zobrazuje se co má. Se zapnutým JS se mi záhadně posílá celá stránka a stav, žádné snippety. Zkoušel jsem to i s jednou šablonou bez layoutu a výsledek byl stejný. Když odkomentuji ten dump v redraw(), tak se objeví v responseText, tedy redrawControl se zavolá, ale účinek žádný.
Co sakra dělám špatně? Dřív mi podobné věci fungovaly normálně…
Používám Nette 2.2.1
Editoval Zax (7. 6. 2014 9:40)
- Zax
- Člen | 370
Jo dík, a koukám, že jsem napsal blbě i tu verzi Nette, hmmm dělat něco před 6. ranní se moc nevyplácí..
EDIT: Tak jsem nahodil Latte 2.3.x-dev a Application 2.3.x-dev a už to běží. Co já se s tím přes noc natrápil a ona to k mému největšímu údivu ani nebyla tak úplně moje chyba.
Editoval Zax (7. 6. 2014 9:55)