Datagrid + AJAX
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- norbe
- Backer | 405
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
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
.