Ublaboo – dvojí zpracování

Ondrejko
Člen | 7
+
0
-

Ahoj,

v komponentě v metodě attached mám dvojí volání (požadavky).
Potřebuji si zajistit push do databáze a uložit si ID do session, jenže se pushnou dva záznamy do DB.

Přišel jsem na to tak, že do attached v komponentě jsem dal \Tracy\Debugger::log(...) a ta mi vypsala dvě URL, viz.:

<?php
public function attached($component)
{
	parent::attached($component);
	// push do databáze a uložení do session ...
	\Tracy\Debugger::log($push);
}
?>

editingGrid-per_page=20&do=stasForm-editingGrid-refreshState
editingGrid-per_page=20

Je možné to nějak obejít, nebo jak to vyřešit?

Děkuji.

Editoval Ondrejko (10. 4. 2019 10:37)

David Matějka
Moderator | 6445
+
+1
-

ahoj, attached se vola po připojení k monitorovanému parentu. pokud jich je tedy monitorovaných víc, tak se zavola vícekrát. můžeš tam dát if ($component instanceof Nette\Application\UI\Presenter) {...

Ondrejko
Člen | 7
+
0
-

Díky Davide, každopádně tohle ještě nevede ke kýženému výsledku. Zkrátka a dobře u toho druhého je ten handle navíc, jestli to nědelá on? Protože to dvojté volání to způsobuje u stejné komponenty… A pozor, když to zavolám v konstruktoru, kde vytvářím komponenty, tak tam taky… prostě všude. :/

Phalanx
Člen | 310
+
0
-

@Ondrejko Možná jsem mimo – co kód dát do render metody komponenty? (můžeš mít render a renderJs metody)

Editoval Phalanx (10. 4. 2019 14:01)

Ondrejko
Člen | 7
+
0
-

V render metodě se to zavolá taky dvakrát… ale to je až poslední fáze, to je jas. Už fakt nevím, kde je chyba.

Ondrejko
Člen | 7
+
0
-

Tím handlem to není… zakomentil jsem ublaboo a vrací to pořád 2x… Jde nějak zjistit, jestli opravdu nevytvářím tu instanci dvakrát? Vytvářím ji jen v presenteru.

Editoval Ondrejko (10. 4. 2019 13:17)

Phalanx
Člen | 310
+
0
-
<?php
public function render()
{
	if ( ! $this->getPresenter()->isAjax()  {
   		\Tracy\Debugger::log($push);
	}
}
?>
Ondrejko
Člen | 7
+
0
-

Jojo, na tomto se to dá opodmínkovat. Ten druhý refresher, jde z datagrid.js. V XHR to jde vidět. Možná jsem to blbě popsal, každopádně všem děkuji za pomoc. Každopádně hlavně ne render.

Editoval Ondrejko (10. 4. 2019 14:41)

Martk
Člen | 661
+
0
-

@Ondrejko jen si dovolím tady dát malou poznámku. Metoda attached je deprecated, pokud máš 3.0 nebo novější 2.4, tak bych použil onAnchor[] nebo monitor() s druhým parametrem.