Autor Zpráva
usb
Profil *
Ahoj, potřebuju malou radu. mám následující kod:

$app = Application::start();
if(!empty($_GET)){
                $app->onClick($_GET["data"]);
 }

class Application{
   public static function start(){
             $html = new HtmlRender();
             $html->render();
   }

   public function onClick($data){
         $this->refresh($data);
   }
   
   public function refresh(array $data){
             $html = new HtmlRender();
             $html->render($data);
   }
}
Jde o to, že metoda render vytváří tabulku a v ní jsou odkazy. Po kliknutí na odkaz se znovu zrenderuje tabulka a upraví se v ní hodnoty podle toho na co bylo kliknuto. Jenomže se stává, že se při kliknutí na odkaz volá 2x render. Potřebuji tedy volat metodu start() jenom při startu aplikace a dále se pak aplikace bude ovládat přes metodu refresh(). Pomohlo by třeba kdyby třída App byla singleton? to by ale nemělo stačit ne? když bude instance jako statická proměnná, stejně se při refresh musí inicializovat znovu nebo ne?
Díky za radu.
Martin02
Profil
usb:
Session?
usb
Profil *
A jak mi může session pomoc? nevím přesně jak to myslíš. dík
Tori
Profil
Možná by pomohlo, kdyby onClick metoda jen zpracovala a uložila data požadavku (např. jestli je to nějaký výpis z DB, tak by přidala podmínku, podle čeho se mají data filtrovat). Metoda render by se pak volala jen jednou a to zvenčí aplikace. Nedává mi totiž moc smysl, aby se komponenta mohla sama od sebe vykreslit ve dvou různých situacích, bez ohledu na okolí.
Tzn ve skriptu budu volat: inicializaci komponenty, nepovinně jí předám nějaká data, a dám příkaz k vykreslení na daném místě. Jak si to komponenta zařídí, kdy přesně načte záznamy z DB a co provede s předanými daty z $_GET, to už jsou její interní záležitosti.
Joker
Profil
usb:
Metoda start() v té třídě mi přijde jen jako zvláštní případ metody refresh(), kde hodnota $data je prázdná. Pak celkem není důvod, aby to byla samostatná metoda.

Dále je v té třídě podle mě zbytečně zadrátovaná třída HtmlRender.
Kdyby ty metody nebyly statické, $html bylo atribut a HtmlRender se tam předával v konstruktoru, bude to univerzálnější. Zároveň by konstruktor vyřešil i ty věci, které se mají volat jen jednou.
usb
Profil *
Joker:
Dále je v té třídě podle mě zbytečně zadrátovaná třída HtmlRender.
Kdyby ty metody nebyly statické, $html bylo atribut a HtmlRender se tam předával v konstruktoru, bude to univerzálnější. Zároveň by konstruktor vyřešil i ty věci, které se mají volat jen jednou.

No ve skutečnosti ten Render přijímá v konstruktoru další třídu, která generuje data pro vykreslení. musel bych tedy nejprve vytvořit tu třídu, potom rendera, tu třídu mu předat a nakonec to předat třídě Application. to je docela dost komplikované. třídu Application chápu jako faktory třídu a tohle použití mi přijde jednodušší.
Jinak díky za rady, už jsem to opravil a funguje to.
Joker
Profil
usb:
třídu Application chápu jako faktory třídu
Tomu moc neodpovídá to, jak v [#1] ta třída vypadá.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: