Kdyby\Events – různé akce při jedné události

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

Dobrý den, mám komponentu která mi reprezentuje tabulku. Dostává pole dat a zobrazuje ho v tabulce. Na nadpisy sloupečků lze klikat a při kliknutí vznikne událost, při které chci nastavit tabulce nová data seřazená podle toho sloupečku. Problém je v tom, že tabulka neví odkud se data berou, jestli to je ArticleRepository, GalleryRepository…takže listener neví jak data seřadit. Nevím jakou třídu repository do Listeneru vložit. Asi to řeším špatně. Poradil by mi někdo?
Zde je náhled kodu:

class Table extends Control{
 private $data;

 private $onClick = [];

 public function setData(array $data){
  $this->data = $data;
 }

 public function handleClickColumn($column){
   $this->onClick($this, $column);
 }
}

class TableListener extends Subscriber{

 private $repository;

 public function __construct(IRepository $repository){
   $this->repository = $repository;
 }

 public function getSubscribedEvents() {
        return ["Table::onClick" => 'sortByColumn'];
 }

 public function sortByColumn(Table $table, $column){
   $table->data = $this->repository->getDataSortBy($column);
 }
}
F.Vesely
Člen | 369
+
0
-

Subscriber se pouziva na services a ty mas komponentu, takze jsi z komponenty musel udelat service, coz neni dobry napad. Budto at Table vi, odkud se data berou, a sama vola getDataSortBy(), nebo at na onClick() nasloucha ta trida, ktera vola setData().

Azathoth
Člen | 495
+
0
-

Ve factory na tu komponentu by sis musel vyžádat nějaký eventManager, který obstarává eventy a všechny listenery bys musel dostat do té komponenty, aby ti to mohlo fungovat.

bluray
Člen | 178
+
0
-

Ok, díky za radu. Udělám to jak psal F.Vesely.