visual paginator a ajax prechod na prvu stranku nefunguje

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

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

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

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.