Vykreslení zanořené kontroly v layoutu (modal)

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

Zdravím,

mám komponentu pro tvorbu modal oken. Je jednoduchá, kosnstruktor má parametr callback který má vrátit komponentu který se má vykreslit v modal okně.

Používá se takhle třeba:

public function createComponentModal() {
		return new ModalControl(function() {
			return new ProductDetailControl($this->getProduct(), $this->cart, $this->productRepository);
		});
	}

Krásně mi to funguje když v šabloně zavolám {control modal}, prostě skvělé. Ovšem z různch důvodů chci vykreslovat tyto modaly v layoutu nezanořené v DOMu. Otázkou je jak toho docílit?
Zkoušel jsem přes attached kdy do BasePresenteru do pole skládám ty komponenty ale zasekl jsem na tom že je nemám jak vykreslit protože attached se volá ař při renderování ve většině případů a v afterRender už to nemůžu do layoutu dokreslit pokud se nepletu. Takže tedy jak na to?

Unlink
Člen | 298
+
0
-

Ahoj
môžeš použiť bloky
do layoutu si niekde pred </body> daj

{ifset modalBlock}{include modalBlock}{/ifset}

a potom tam kde potrebuješ si ten blok nadefinuješ

{block modalBlock}
{control modal}
{/block}

ps. píšem to len z hlavy, tak som si úplne neni istý či takto, ale bloky sú to čo hľadáš :)

zt
Člen | 13
+
0
-

no bloky ovšem nefungují v controlách, já můžu mít ten modal vytvořený hiearchicky někde v jiných komponentách

akadlec
Člen | 1326
+
0
-

no z komponenty nic nevytáhneš do hlavního layoutu, tady bych řek že se musíš smířit s tím že bude modal zanořen a nebo předělat logiku práce s modaly a přesunout je do presenteru.

Pavel Macháň
Člen | 282
+
0
-

zt napsal(a):

Zdravím,

mám komponentu pro tvorbu modal oken. Je jednoduchá, kosnstruktor má parametr callback který má vrátit komponentu který se má vykreslit v modal okně.

Používá se takhle třeba:

public function createComponentModal() {
		return new ModalControl(function() {
			return new ProductDetailControl($this->getProduct(), $this->cart, $this->productRepository);
		});
	}

Krásně mi to funguje když v šabloně zavolám {control modal}, prostě skvělé. Ovšem z různch důvodů chci vykreslovat tyto modaly v layoutu nezanořené v DOMu. Otázkou je jak toho docílit?
Zkoušel jsem přes attached kdy do BasePresenteru do pole skládám ty komponenty ale zasekl jsem na tom že je nemám jak vykreslit protože attached se volá ař při renderování ve většině případů a v afterRender už to nemůžu do layoutu dokreslit pokud se nepletu. Takže tedy jak na to?

Řeším to pomocí „Modal manageru“, který je obsažen v Base presenteru a pomocí signálu vložím do továrničky jaký modál se má vytvořit (pomocí extension mám registrováné továrničky modálů které jsou pro manager dostupné).

zt
Člen | 13
+
0
-

Pavel Macháň: nějaký příklad by nebyl prosím? … není zase blbé v komponentně spoléhat na presenter?

Pavel Macháň
Člen | 282
+
0
-

zt napsal(a):

Pavel Macháň: nějaký příklad by nebyl prosím? … není zase blbé v komponentně spoléhat na presenter?

@zt Komponenta funguje sama o sobě. Manager nedělá nic jiného než že modál zobrazí (načte pomocí ajaxu nebo po redirectu). V komponentě (modál) se s presentrem vůbec nepracuje. Pokud by si modál vložil ručně do templatu tak by také fungovala. Kdyby bylo potřeba zavolat presenter tak v modálu vytvoříš event, který následně zpracuje presenter v rámci eventu.

Editoval Pavel Macháň (28. 8. 2015 15:13)