handle a vykreslovanie ajxom

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, neviem ako to mam riesit…

mam constructor ktoremu presam selection model:

  public function __construct(Selection $tasksListTable,$taskId)
  {
    parent::__construct($tasksListTable);
    $this->taskId = $taskId;
    $this->tasksListTable = $tasksListTable->get($this->taskId);
  }

potom mam handle v ktorom menim hodnotu pola v tejto tabulke:

  public function handleStartTask($taskId)
  {
    $this->tasksListTable->update(array('status_id' => 2));

    if ($this->presenter->isAjax()) {
      $this->getParent()->invalidateControl('taskDetail');
    } else {
        $this->presenter->redirect('this');
    }
  }

a nakoniec mam render kde posielam tabulku sablone:

  public function render()
  {
      $this->template->setFile(__DIR__ . '/taskDetail.latte');
      $this->template->tasksListTable = $this->tasksListTable;
      $this->template->render();
  }

problem je v tom ze ked spustim handle nie ajaxovo poziadavka je ok,
ale ked poziadavka na handle ide ajaxovo tak sa handle vykona , ale pri znovuvykresleni snippetu sa neprevavi zmena.
neviete mi poradit ako to vyriesit?

moj odhad je ze najprv v constructore vyberiem zaznam podla id, a vykreslim, ked spustim handle, ten sa vykona a urovi redirect a znovu sa v constructore vyberie zaznam a vykresli.

pri ajaxovom volani to asi tak neprebehne… ci?
viete mi poradit?

Felix
Nette Core | 1270
+
0
-

A napriklad ve Firebugu ten ajax request vidis, ze probehne? Mas spravne nastaveny script Ajax s jQuery nebo nette.ajax.js?

Ot@s
Backer | 476
+
0
-

Po konstruktoru je sice v $this->tasksListTable ActiveRow, ale když nahlédneš do update(), tak se s ActiveRow nepracuje. U verze bez ajaxu je to OK, protože dojde k reloadu stránky (a znovunačení záznamu v konstruktoru). Ověř si to podle:

public function handleStartTask($taskId)
{
  $this->tasksListTable->update(array('status_id' => 2));

  if ($this->presenter->isAjax()) {
    $this->tasksListTable = $tasksListTable->get($this->taskId); // "refresh" po update
    $this->getParent()->invalidateControl('taskDetail');
  } else {
      $this->presenter->redirect('this');
  }
}