Problém s odkazováním z komponenty do Presenteru

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

Ahoj, řeším problém … mám DataGrid ( používám ublaboo ) a mám tam GroupAction, kdy si označím třeba 3 řádky z té tabulky, zvolím tu akci a teď bych potřeboval přesměrovat do šablony nějakého Presenteru. Tento DataGrid mám napsaný v komponentě a když to napíšu takhle:

$grid->addGroupAction('Rezervovat')->onSelect[] = [$this, 'Reservation:data'];

Tak to řve, že to nezná tu „komponentu“ Reservation. Taky bych chtěl nějak předat, jaké že řádky si to uživatel vybral. Jak na to ?

rkor
Člen | 62
+
0
-

třeba:

$grid->addGroupAction('Rezervovat')->onSelect[] = [$this, 'reservationData'];

public function reservationData($items)
{
	$this->getPresenter()->redirect("Presenter:action",[$items]);
}
Sekyscz
Člen | 10
+
0
-

Funguje to, díky, ale je tu další problém … chtělo to vlastně ať do render Metody v tom presenteru dám ten parametr a teď to řve:

Argument $items passed to App\Presenters\ReservationPresenter::renderData() must be scalar, array given.

To se nedá předávat pole ? Díky

rkor
Člen | 62
+
0
-

V ReservationPresenter:

public function renderData(array $items) {
...
duke
Člen | 650
+
+1
-

Nedoporučuji vyvolávat přesměrování tímto způsobem z komponent. Přesměrování je zodpovědností presenteru a doporučuji tedy spíše vytvořit novou událost ve tvé komponentě, na kterou bude presenter reagovat přesměrováním. Tj. např. takto:

// událost v komponentě (která je potomkem Nette\Object):
public $onReserved = [];

// po vytvoření $grid:
$grid->addGroupAction('Rezervovat')->onSelect[] = [$this, 'handleReserve'];

public function handleReserve($items)
{
	$this->onReserved($items);
}

// presenter:
$this['fooComponent']->onReserved[] = function ($items) {
	$this->redirect("Presenter:action", [$items]);
}