Předání persistentních parametrů control i při {plink}

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

Je možné předat persistentní parametry controlu i při linku na presenter?

Potřeboval bych z control poslat požadavek na presenter a po redirectu v presenteru, aby byla control ve stejném stavu.

PetrP
Člen | 587
+
0
-

Můžeš popsat přesněji (i s ukázkou kódu) o co ti de, protože možná je jen více hodin, ale já nechápu co přesně myslíš ;]

Blizzy
Člen | 149
+
0
-

Mám control, který má určitý persistentní parametr, ten se normálně předává při všech akcích, které dělám s controlem. Pokud potřebuji udělat nějaký takovýto signál, použiju v šabloně control {link}.

Pokud ale potřebuju z control poslat signál na presenter, použiju {plink}. Odkazem na presenter {plink} se mi ale už nepředá ten persistentní parametr controlu. Jak ho předat i v presenteru?

Uvedu konkrétní příklad:
Mám control, který slouží k procházení složek a vypisuje obrázky ve složce do tabulky. Jeho persistentní parametr je aktuální adresář (relativní cesta), ve kterém se nachází. Tento control se používá pro procházení složek a přiřazování obrázků k produktům. U každého obrázku control zobrazí odkaz „Přiřadit“, což je {plink} na akci presenteru, v té je obrázek přiřazen k produktu a provede se redirect na původní view s controlem pro výběr obrázků. Tady se ale control nenachází v poslední složce, protože nebyl zachován jeho parametr, který určuje aktuální adresář.

vlki
Člen | 218
+
0
-

Nestačilo by posunout ten persistentní parametr na vyšší úroveň – tedy do presenteru? S tím, že by jsi k němu z controlu přistupoval pomocí $this->presenter->var? Automaticky by se měl převádět pořád. I když posíláš signály jen uvnitř controlu.

Blizzy
Člen | 149
+
0
-

vlki napsal(a):

Nestačilo by posunout ten persistentní parametr na vyšší úroveň – tedy do presenteru? S tím, že by jsi k němu z controlu přistupoval pomocí $this->presenter->var? Automaticky by se měl převádět pořád. I když posíláš signály jen uvnitř controlu.

Díky, tohle řešení funguje. Divné, že mě to nenapadlo. Přidal jsem to do všech presenterů, které pracují s danou control, pak stačilo pár search&replace a už to funguje.

PetrP
Člen | 587
+
0
-

persistentní parametri componenty se přenášejí při signálech presenteru.

Pokuď je chceš přenášet i při akcích, případně i přes několik presenterů tak musíš komponentu označit jako persistentní

/**
 * @persistent(nazevComponenty)
 */
class SomethingPresenter extends BasePresenter

(Myslím že to správně funguje až ve verzi 0.9)

Jinak když nemužeš/necheš použít anotace tak si překryj detekční metodu

public static function getPersistentComponents()
{
	return array('nazevComponenty');
}
Blizzy
Člen | 149
+
0
-

PetrP napsal(a):

Pokuď je chceš přenášet i při akcích, případně i přes několik presenterů tak musíš komponentu označit jako persistentní

Vypadá to zajímavě, vůbec jsem netušil, že něco takového jde.