Ublaboo/Datagrid – jak zajistit aby se po editaci prekreslily updatovany hodnoty
- pp
- Člen | 50
Ahoj,
s nette zacinam a zacal jsem si zkouset i tuhle supr kompenentu. Mam ale
problem, nevim jak zajistit aby se po editaci radku rovnou nacetly/zobrazily
novy updatovany hodnoty. Zustavaji puvodni a teprve po dalsim vyvolani editace
se nactou spravne.
Vlastne se mi ani v onsubmit[] neprovede vypsani flashMessage do
presenteru.
Jak to prosim ma vypadat spravne?
public function createComponentCoreGrid($name)
{
$grid = new DataGrid($this, $name);
$grid->setDataSource($this->coreRouterManager->getAll());
$grid->addColumnText('id', 'ID');
$grid->addColumnText('ip', 'IP');
$grid->addColumnText('name', 'Název');
$grid->addInlineEdit()->setTitle('Editovat')
->onControlAdd[] = function($container) {
$container->addText('id', '');
$container->addText('ip', '');
$container->addText('name', '');
};
$grid->getInlineEdit()->onSetDefaults[] = function($container, $item) {
$container->setDefaults([
'id' => $item->id,
'ip' => $item->ip,
'name' => $item->name,
]);
};
$grid->getInlineEdit()->onSubmit[] = function($id, $values) use ($p){
$p->coreRouterManager->update($values);
$p->flashMessage("Byl upraven záznam ID [$id]", 'success');
$p->redrawControl('flashes');
};
}
- pp
- Člen | 50
v modelu je jenom update do DB a provede se
problem mam s tim, ze se pri save-nuti upraveneho radku v gridu nenactou hned
nove hodnoty
kdyz ale kliknu znova na edit tak uz tam jsou
asi mi nekde chybi nejaky redraw
public function update($values)
{
try {
$res = $this->database->table(self::TABLE_NAME)->where(self::COLUMN_IP, $values->ip)->update([
self::COLUMN_NAME => $values->name,
]);
return $res;
} catch (Nette\Database\UniqueConstraintViolationException $e) {
throw new DuplicateNameException("Chyba, IP adresa " . $ip . " už v DB existuje", 0, $e);
}
}
- pp
- Člen | 50
Zdravim,
chtel bych poprosit o dalsi radu. V ramci gridu uz se vse prekresluje
jak ma.
Pokud provadim s daty akci pres signal – treba „delete!“ tak se taky vse provede, vypise flashMessage a spravne prekresli.
public function handleDelete($id)
{
$this->flashMessage("Mažu záznam ID: [$id]", 'success');
$this->coreRouterManager->delete($id);
if ($this->isAjax()) {
$this->redrawControl('flashes');
$this['coreGrid']->reload();
} else {
$this->redirect('this');
}
}
ale pokud pouziju inlineEdit nebo inlineAdd a chci poslat flashMessage presenteru tak to se nekde ztraci. Proste tu flashMessage nevypise.
$p = $this;
$grid->getInlineEdit()->onSubmit[] = function($id, $values) use ($p){
$p->coreRouterManager->update($values);
$p->flashMessage("Byl upraven záznam ID [$id]", 'success');
if ($this->isAjax()) {
$this->redrawControl('flashes');
$this['coreGrid']->redrawItem($id);
} else {
$this->redirect('this');
}
};
v @layout sablone presenteru mam
<div n:foreach="$flashes as $flash" n:class="flash, $flash->type">{$flash->message}</div>
co deleam blbe?