ajax a Visualpaginator v komponentě

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

Ahoj,
jeste porad v nette zacinam a snazim se neco naucit.
Napadlo me si udelat vypis tabulky s uzivateli jako samostatnou komponentu s visualpaginatorem, ale chtel bych, aby to bylo ajaxově.
Kody mam nasledujici:

uzivatele.php

class uzivatele extends Control
{
    public function __construct()
    {
      parent::__construct();
    }

    public function createComponentPaginator()
    {
            $vp = new VisualPaginator();
            $vp->paginator->itemsPerPage    = 10;
            return $vp;
    }

    public function beforeRender()
    {
        if ($this->presenter->isAjax())
            $this->invalidateControl('vypis_uzivatelu');
    }

    public function Render()
    {
            $template = $this->template;
            $template->setFile(dirname(__FILE__) . '/uzivatele.phtml');

            $template->pridatUzivatele = $this['pridatUzivatele'];
            $template->upravitUzivatele = $this['upravitUzivatele'];

            $AdministraceModel = new AdministraceModel;
            $dataSource = $AdministraceModel->NactiUzivatele();
            $this['paginator']->paginator->itemCount = $dataSource->count();
            $template->uzivatele = $dataSource->applyLimit($this['paginator']->paginator->itemsPerPage, $this['paginator']->paginator->offset)->fetchAll();

            $template->render();
    }
}

uzivatele.phtml

{snippet vypis_uzivatelu}

	samotna tabulka s vypisem

{control paginator}


{/snippet}

javascript pro uzivatele.phtml mam takto:

<script type="text/javascript">
$('.paginator a').live('click', function(event) {
        event.preventDefault();
        $.getJSON(this.href);
        return false;
});
</script>

Pak si tovarnickou udelam v presenteru komponentu uzivatele a prenesu widgetem do sablony.
Pokud vypnu javascript tak vse strankuje v pohode, ale zaboha to nemuzu rozchodit v AJAXu. Nejsem si vsak jistej, jestli muzu v uzivatele.php invalidovat v beforeRender (takto mi to fungovalo, kdyz byl kod jen na bazi presenter->sablona).

Ve firebugu žádná chyba vidět není a po kliknutí na stránkovač se nevrací žádný JSON obsah :-(

Poradíte ?

Editoval bauer01 (26. 3. 2010 18:39)

Etch
Člen | 403
+
0
-

A máš dobře dané zavináče??

bauer01
Člen | 30
+
0
-

zatim snad jo, kdyz jsem do te komponenty pridal jeste moznost smazat uzivatele z vypisu, tak se mi snippet updatuje a uzivatel se poslusne vymaze – paginator ale porad nefunguje, pouze jen v php :-) vypada to pak nejak takhle:

uzivatele.php

class uzivatele extends Control
{
    public function __construct()
    {
      parent::__construct();
    }

    public function handleSmazatUzivatele($id)
    {
            $AdministraceModel = new AdministraceModel;
            $AdministraceModel->smazatUzivatele($id);

            if (!$this->presenter->isAjax())
                $this->redirect('this');
                    else
                        $this->invalidateControl("vypis_uzivatelu");
    }

    public function createComponentPaginator()
    {
            $vp = new VisualPaginator();
            $vp->paginator->itemsPerPage    = 10;
            return $vp;
    }

    public function beforeRender()
    {
        if ($this->presenter->isAjax())
            $this->invalidateControl('vypis_uzivatelu');
    }

    public function Render()
    {
            $template = $this->template;
            $template->setFile(dirname(__FILE__) . '/uzivatele.phtml');

            $template->pridatUzivatele = $this['pridatUzivatele'];
            $template->upravitUzivatele = $this['upravitUzivatele'];

            $AdministraceModel = new AdministraceModel;
            $dataSource = $AdministraceModel->NactiUzivatele();
            $this['paginator']->paginator->itemCount = $dataSource->count();
            $template->uzivatele = $dataSource->applyLimit($this['paginator']->paginator->itemsPerPage, $this['paginator']->paginator->offset)->fetchAll();

            $template->render();
    }

}

a uzivatele.phtml

{snippet vypis_uzivatelu}

        samotna tabulka s vypisem
	u kazde polozky je odkaz {link SmazatUzivatele!, $uzivatel->ID}


{control paginator}


{/snippet}

Editoval bauer01 (26. 3. 2010 18:30)

Etch
Člen | 403
+
0
-

No tak jinak dostane se vůbec na beforeRender() nejsem si teď tak úplně jist jestli beforeRender() je v životním cyklu Controlu. Dej si do toho třeba

public function beforeRender(){
	echo 'test';
	exit;
}

EDIT: Jo a ještě prosím pro lepší čitelnost obarvuj kód.

Editoval Etch (26. 3. 2010 18:15)

bauer01
Člen | 30
+
0
-

uz jsem to napravil :-)

jj, mas recht, nebude tam. Supl jsem to do tovarnicky v presenteru a je to OK !

public function createComponentUzivatele() {
    $uziv = new uzivatele;
        $uziv->invalidateControl('vypis_uzivatelu');
    return $uziv;
}

Moc diky za pomoc ;-)