handle a vykreslovanie ajxom
- duskohu
- Člen | 778
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 | 1190
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
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');
}
}