Invalidace snippetu přes formulář
- zatomik
- Člen | 19
Ahoj,
potřeboval bych při ajaxovém odeslání formuláře invalidovat snippet, nyní formulář dědím od Nette\Application\UI\Form, je mi jasné, že cesta asi povede přes dědění od Control. Formuláře mám jako zvláštní třídy a mohu je do šablon pohodlně vkládat kdekoliv pomocí této syntaxe:
<?php
{form loginForm}
<input n:input="email" class="textStandard" />
{/form}
?>
Komponenta se vytvoří automaticky díky této metodě a nastavení konfigu:
<?php
public function createComponent($name){
return $this->presenter->getContext()->{'create' . $name}();
}
?>
Jelikož nemůžu vícenásobně dědit, jak docílím toho, abych formuláře odvozené od Control mohl také takhle pěkně použít?
Děkuji za nápady
- Vojtěch Dobeš
- Gold Partner | 1316
Pokud je snippet v šabloně view nebo nějakého UI\Control
,
lze ho invalidovat bez problémů. Snippet by nešlo invalidovat pouze, pokud by
bylo v šabloně nějak přivařené k instanci UI\Form
. Což
v uvedeném příkladu nevidím.
Druhou část otázky jsem nepochopil, co tím máš na mysli?
- zatomik
- Člen | 19
Když použiji Nette\Application\UI\Form a při úspěšném submitu se volá metoda, která je součástí této třídy, tak je sice možné invalidovat snippet, ale již se neprovede překreslení, respektivě odeslání AJAXem, mám pocit, že je v této chvíli na invalidaci již pozdě? Nebo je chyba někde jinde. U normální komponenty mi invalidace funguje bezproblému, například při odeslání signálu na handleXY.
Pokud ale uživatel odešle formulář, tak v metodě, která ho zpracovává je na invalidaci asi již pozdě. Proto jsem chtěl zkusit celý formulář podědit od Control a invalidovat tam.
- Vojtěch Dobeš
- Gold Partner | 1316
Bez zbytku kódu je zcela nepochopitelné, proč ti tato úprava funguje :). Jen kdyby tady někdo hledal poučení :).
- zatomik
- Člen | 19
Ahoj,
tak přeci jen ještě bojuji s problémem invalidace snippetů. Pokud mám v presenteru signál, který volám, můžu invalidovat snippety, které jsou pouze přímo v latte šabloně, která patří k danému view. V této šabloně mám ale ještě „include ../header.latte“ a tam se již snippety nepřekreslí. Zkoušel jsem využít i @layout, ale problém je stejný.
Musí být tedy všechny snippety přímo v šabloně daného view, bez použití include? Nebo lze nějak snippet ručně zaregistrovat (to je asi blbost)?