Ublaboo/Datagrid – jak zajistit aby se po editaci prekreslily updatovany hodnoty

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

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');
                };

	}
Darkling
Člen | 35
+
0
-

Ahoj, možná příčina by mohla být v $p->coreRouterManager->update($values);. Zkontroluj request jestli nedostáváš nějakou chybu, která zastaví provádění kódu.

pp
Člen | 50
+
0
-

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

jasne – to je ono, diky

pp
Člen | 50
+
0
-

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?