visual paginator a ajax prechod na prvu stranku nefunguje
- duskohu
- Člen | 778
Ahojte viete mi poradit?
ked prechadzam pomocou visual paginatora od stranky 1>n tak je vsetko ok
ale ked prechadzam od n>1 tak na jednotku ma uz nepusti neposle ziaden
parameter [1] (asi ani nema)
ale tym padom ma neprepne na stranku [1] ked to robim bez ajaxu je vsetko ok ale
pri ajaxe to nejde
ak manualne dopisem do url ten parameter [1] tak to ide aj v ajaxe,
predpokladam ze ten parameter tam nema posielat kezde ide na 1 stranku ale
preco mi to komponenta nespracuje??
viete mi poradit?
mam komponentu v presenteru >>
public function createComponentExecutorIncompleteTasks()
{
$taskList = new TaskList($this->tasksListTable);
$taskList->invalidateControl('taskListTable');
return $taskList;
}
v komponente TaskList:
protected function createComponentVisualPaginator()
{
$visualPaginator = new VisualPaginator();
return $visualPaginator;
}
public function render()
{
$paginator = $this['visualPaginator']->getPaginator();
$paginator->itemsPerPage = 5;
$paginator->itemCount = count($this->tasksListTable);
$this->tasksListTable->limit($paginator->itemsPerPage, $paginator->offset);
$this->template->taskTable = $this->tasksListTable;
$this->template->setFile(__DIR__ . '/taskList.latte');
$this->template->render();
}
a soblona: taskList.latte
{snippet taskListTable}
{control visualPaginator}
<table class="task-list-table">
<thead>
<tr>
<th>Title</th>
</tr>
</thead>
<tbody>
{foreach $taskTable as $task}
<tr n:class="$iterator->isOdd() ? odd : even">
<td class="title">{$task->title}</td>
</tr>
{/foreach}
</tbody>
</table>
{/snippet}
- thunderbuff
- Člen | 164
Oživuji toto téma:-)
Mám stejný problém. Kód je následující:
<?php
public function renderDefault() {
$this->template->currentUserId = $this->getUser()->getId();
$this->template->title = "Show Users";
}
public function createComponentUsersTable() {
$DI = new \Nette\DI\Container();
$DI->parameters["userid"] = $this->getUser()->getId();
$DI->addService("connection", $this->context->database);
$DI->addService("translator", $this->translator);
$component = new UsersTable($DI);
if ($this->isAjax()) {
$component->invalidateControl('dataGrid');
}
return $component;
}
?>
Přechod na první stránku nefunguje. Podle firebugu vidím, že se nepošle JSON se snippetem, ale HTML celé stránky.
Pokud invalidaci přendám do renderDefault, vše funguje, ale přijde mi to hrozně ošklivé.
<?php
public function renderDefault() {
$this->template->currentUserId = $this->getUser()->getId();
$this->template->title = "Show Users";
if ($this->isAjax()) {
$this['usersTable']->invalidateControl('dataGrid');
}
}
public function createComponentUsersTable() {
$DI = new \Nette\DI\Container();
$DI->parameters["userid"] = $this->getUser()->getId();
$DI->addService("connection", $this->context->database);
$DI->addService("translator", $this->translator);
$component = new UsersTable($DI);
return $component;
}
?>
Nevíte, jak funkčně invalidovat přímo v továrničce?
- thunderbuff
- Člen | 164
Tak mě jedno řešení napadlo. Ve VisualPaginatoru je nastaveno toto:
<?php
/** @persistent */
public $page = 1;
?>
…Takže se při přechodu na stránku 1 parametr nepřenese, jelikož by to díky výchozí hodnotě nemělo smysl. Stačí smazat výchozí hodnotu, a invalidace přímo v továrničce začne fungovat.