Pořadí komponent, nebo přidání inputu později po vytvoření formuláře
- Oli
- Člen | 1215
Ahoj,
nevím co bych potřeboval a co je možné. Jde o to, že mám komponentu,
která se stará o přepínání jazyků na základě hodnoty za hash tagem.
Mám další komponentu, která obsahuje formulář, kde je select. Ten select
je závislej na jazyku, který se nastaví v první komponentě až se provede
AJAX post dotaz. Potřeboval bych teda.
- Buď zajistit, že se provede jedna komponenta a po ní druhá,
- nastavit array u selectu později nebo
- přidat celý select až později, třeba při plnění daty.
Je něco takovýho možné? nebo na to jdu uplně blbě a měl bych na to jít jinak? Díky
- PirateJack
- Člen | 9
Ahoj, řekl bych že bys na to měl jít jinak…
Ajax je asynchronní, pokud potřebuješ provádět tyhle závislosti, tak to
není asynchronní.
- V podstatě můžeš
- reagovat na změnu jazyku v always callbacku jquery…
- nedělat tyhle závislosti ajaxem, ale klasickým request/response
Kdyžtak zkus více popsat problém, používáš příliš vágní popis, takže ti nikdo nemůže přesně poradit…
Editoval PirateJack (2. 9. 2013 15:27)
- wallkysek
- Člen | 52
nevím jestli to je to co hledáš, ale koukal ses někam sem?
https://doc.nette.org/cs/forms#…
Pokud si dobře vzpomínám někde v dokumentaci jsem našel něco co se týkalo dvoujazyčných selectů
- Oli
- Člen | 1215
Jasně, díky.
Jde o to, že mám administrační rozhraní. Je potřeba přepínat mezi jazyky, ve kterých se bude publikovat na frontendu. Čili administrační rozhraní je samo o sobě celé v jednom jazyce. Všechno to je v pohodě a funguje dobře, jediný problém je u selectu. Kod vypadá zhruba takhle:
// komponenta, která vykresluje jazyky, mezi kterými je možno přepínat a zajišťuje předání jazyku do presenteru
{control languageSwitch}
{snippet form}
// komponenta, která vykresluje formulář
{control editPage}
{/snippet}
Problém je ten, že se pravděpodobně vytvoří komponenta s formulářem a až pak dojde ke změně jazyku, takže se vykreslí selectbox vždy s jazykem jakoby o krok pozdě. Kritický řádek je tento v editPage (formulář):
//editForm component
public function createComponentForm()
{
...
$parentId = $this->pagesModel->getParents($presenter->getLang())->fetchPairs('id', 'title');
...
}
To $presenter->getLang()
je tahaný z presenteru, ale
evidentně je to tahaný moc brzo a načte to starý data.
Je to takhle jasnější? :-)
- saimons
- Člen | 293
Mam trochu bordel v tom co delas pres ajax a co ne. Ale ja tohle resim mimo ajax, preklereslenim tak, ze mam pro admina persistentni parametr langAdmin a v nem mam nakou defaultni hodnotu, kterou popripade prepisu odeslanim formulare na zmenu jazyka. Urcite by to slo a dalo se efektivne resit i pres session.
- Oli
- Člen | 1215
ajaxove se meni jazyk a hodnoty ve formuláři. Zatím to není asi ideální, časem bych to chtěl napojit na rozšíření history pro ajax.nette.js. Zatím to mám přes jquery ba-bbq.
Myšlenka je taková, že v některých projektech je potřeba multijazyčnost a v některých ne. Je to teda potřeba vypnout a zároveň aby presenter v podstatě jen držel jazyk a o změnu se starala komponenta. V té komponentě se právě přepisuje session a to si myslím, že je problém. Že se vykreslí formulář a potom se přepíše session, takže se formulář vykreslí se starou session. URL adresu mám ve tvaru
neconeco.cz/stranky/edit/1#lang=cs
neconeco.cz/stranky/edit/1#lang=en
...
No a tohle se zpracuje a ajaxem překreslí podle jazyku, ktery je v url.
var url = $.param.fragment();
if (url != "")
{
var params = $.deparam.fragment();
if (params.lang != undefined)
{
$.ajax({
type: "POST",
url: {link languageChange!},
data: { lang: params.lang }
});
} else
{
alert('Snažíte se přistoupit na stránku, která neexistuje');
}
}
Jak říkám, tohle funguje bez problému, tak jak potřebuju. Problém je
jen, pokud select obsahuje pro každý jazyk jiná data. To se potom vždy
o jedno opozdí: přepnu
z cs na en → vykreslí select s cs daty
z en na de → vykreslí select s en daty
z de na cs → vykreslí select s de daty
Tak a otázka zní, jde to nějak jednoduše vyřešit? :-)