Datagrid + AJAX

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

Zdravím,

řeším problém s ajaxem u datagridu. Stránkování a řazení funguje (ovšem nepoužije se ajax). Filtrování však při Ajaxovém požadavku vyhazuje vyjímku (při vypnutém JS funguje ok). Tady je výstup z firebugu:
Nejprve mi to házelo chybu:

{"error":"exception 'FileNotFoundException' with message 'Missing template file '\/var\/www\/dev\/app\/templates\/BackendModule\/UsersModule\/1'...

Pokud vytvořím soubor templates/BackendModule/UsersModule/1, obdržím následující data:

{"state":{"usersList-page":null,"usersList-order":null,"usersList-filters":"user=asfd","usersList-itemsPerPage"

:null}}

Tzn. vůbec neobdržím aktualizovanou komponentu. Otázka zní, jak toho dosáhnout(používám nové šablony)?

Presenter:

class Backend_Users_UserPresenter extends Backend_BackendPresenter
{
    /** @var Users */
    protected $users;

    protected function startup()
    {
        parent::startup();
        $this->checkPermission("users", "view");
        $this->users = new Users();

        //$this["usersList"];
    }

    protected function createComponentUsersList($name)
    {
        $grid = new DataGrid();
        $grid->rememberState = TRUE;
        $grid->bindDataTable($this->users->getUsers('admin'));

        $grid->displayedItems = array(0, 15, 30, 60);

        // multiple actions
        $operations = array('delete' => _('delete'), 'move_to_group' => _('move to group'));
        $callback = array($this, 'gridOperationHandler');
        // allows checkboxes to do operations with more rows
        $grid->allowOperations($operations, $callback);

        // available columns
        $grid->addColumn('user', _('User'))->addFilter();
        $grid->addColumn('name', _('Name'))->addFilter();
        $grid->addColumn('lastname', _('Lastname'))->addFilter();
        $grid->addDateColumn('last_login', _('Last login'), _('%m/%d/%Y'));

        $grid->keyName = "user";

        // row actions
        $grid->addActionColumn(_('Actions'));
        $icon = Html::el('span');
        $grid->addAction(_('Edit'), 'edit', clone $icon->class('icon icon-edit'));
        $grid->addAction(_('Create new user with the same role.'), 'clone', clone $icon->class('icon icon-copy'));
        $grid->addAction(_('Delete'), 'deleteUser!', clone $icon->class('icon icon-del'), $useAjax = TRUE);



        $grid->setTranslator($this->translator);
        return $grid;
    }
}

Šablona Users.default.phtml:

{block #content}

<h1>{block #title}{!_"Users"}{/block}</h1>
{control usersList}

Šablona layoutu:

{block #layout}
...
{block #title}Homepage{/block} | WebSystem admin
...
{include #content}
...
romansklenar
Člen | 655
+
0
-

V nových šablonách nejsou snippety ještě oficiálně podporované. Dá se to ale ještě nejspíš obejít zavináčovou magií – zkusit nalupat zavináče před block, include a widget.

norbe
Backer | 405
+
0
-

Ok, zkusím (myslel jsem, že už to není potřeba). Díky