ResponseText mixuje celou stránku a state, triviální úkol nefunguje

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

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

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)