Ajax, Naja, překreslení komponenty ⇒ co s URL?
- Kcko
- Člen | 470
Ahoj,
jak řešíte ajaxové překreslení formuláře s GET parametry, tak aby
dávaly smysl?
Když ajaxově odešlu formulář v komponentě, tak si jeho obsah uložím
do persistentní proměnné ($this->f) a překreslím příslušné
snippety.
Vše je funkční včetně stránkování. Ale nelíbí se mi moc URL, klasická
url po odeslání formuláře GETem + věci navíc (jméno komponenty, a
tlačítko submitu).
**?f%5Btype%5D%5B%5D=0&f%5Blocation%5D%5B%5D=0&f%5Bdisposition%5D%5B%5D=0&f%5Bsize%5D%5B%5D=0&do=realtyList-filterForm-submit&search=Hledat
**
Kdyby to byl presenter a nerešil bych to ajaxove tak si to přesmeruju na tu samou akci s parametrem F a ta URL bude vypadat líp.
V případě ajaxu a komponenty nevím co s tím, forward mi nepomůže. Řešíte to nějak? nebo neřešit.
$form->onSubmit[] = function ($form) {
$this->page = 1;
$this->f = $form->getValues()['f'];
$this->redrawControl('list');
$this->redrawControl('pager');
};
- Pavel Kravčík
- Člen | 1196
Pokud jde o to mít ji hezkou, tak možná stačí router. Případně,
pokud Tě nezajímá, co tam je – tak history.api. Nebo nějaký převodník (např.
productList=1–2–3–4), vypadá to líp než %5D%5B%5D
.
- Kcko
- Člen | 470
Pavel Kravčík napsal(a):
Pokud jde o to mít ji hezkou, tak možná stačí router. Případně, pokud Tě nezajímá, co tam je – tak history.api. Nebo nějaký převodník (např. productList=1–2–3–4), vypadá to líp než
%5D%5B%5D
.
Ahoj, dík za odpověd.
Router zní jako odpověd, ale asi jsem se ptal něco jiného, špatně jsem to
vysvětlil.
Jestli je ekvivalent tohohle kódu v komponentě odeslané ajaxem.
$form->onSubmit[] = function ($form) {
$this->page = 1;
$this->f = $form->getValues()['f'];
$this->presenter->redirect('default', ['filters' => $this->f, 'page' => $this->page]);
};
Jinak Naja si aspoň s tou první podobou poradí dobře (formulář je ajaxový, nastavený na GET), takže o parametry nepřijdu a fungují i když někomu pošlu URL, jen jsem se chtěl zbavit dalších parametrů v URL, které generuje Nette jako odeslání formuláře a případně tu URL ještě zlepšit.
Ale primárně mě zajimá ten ekvivalent.
- mystik
- Člen | 313
Nejsem si jistej jestli rozumim. Jde o to po submitu formukare presmerovat na nejakou hezkou URL co vygeneruje stejny obsah? Pak je potreba to resit na urovni presenteru. Po odeslani komponenty presmerovat na akci presenteru s parametry co vykresli vysledek stejne jako kdyby to bylo na urovni presenteru. Samotna podoba URL se signalem pro komponentu musi obsahovat parametry ktere urcuji o jaky signal jde.
- Kcko
- Člen | 470
mystik napsal(a):
Nejsem si jistej jestli rozumim. Jde o to po submitu formukare presmerovat na nejakou hezkou URL co vygeneruje stejny obsah? Pak je potreba to resit na urovni presenteru. Po odeslani komponenty presmerovat na akci presenteru s parametry co vykresli vysledek stejne jako kdyby to bylo na urovni presenteru. Samotna podoba URL se signalem pro komponentu musi obsahovat parametry ktere urcuji o jaky signal jde.
Ahoj, ano, rozumíš tomu dobře, vyjadřoval jsem se jako hotentot :)
Máš pravdu, přesměrovat na presenter na nějakou hezčí URL bez věcí, které mi generuje samotný formulář komponenty a v presenteru pak komponentu přes tyto parametry opět nasetovat.
Fajn, to zní dobře, ale jak přesměrovat z komponenty na presenter ajaxově s i tou změnou URL?
- m.brecher
- Generous Backer | 873
@Kcko Pokud používáš pro ajax knihovnu Naja, tak by asi šlo modifikovat chování Naja, která právě zapisuje do historie prohlížeče to url (takové jaké udělá signál komponenty) tak, aby zapisovala to pěkné url. Komponenta by se nesetovala, ale kdyby uživatel refreshnul stránku, presenter by musel umět komponentu nasetovat i pod tímto pěkným url.
Mrkni do dokumentace Naja, nebo na video na youtube od Jirky Pudila.
- m.brecher
- Generous Backer | 873
@Kcko Naja má eventy pro manipulaci s history: https://naja.js.org/#…
- Kcko
- Člen | 470
m.brecher napsal(a):
@Kcko Pokud používáš pro ajax knihovnu Naja, tak by asi šlo modifikovat chování Naja, která právě zapisuje do historie prohlížeče to url (takové jaké udělá signál komponenty) tak, aby zapisovala to pěkné url. Komponenta by se nesetovala, ale kdyby uživatel refreshnul stránku, presenter by musel umět komponentu nasetovat i pod tímto pěkným url.
Mrkni do dokumentace Naja, nebo na video na youtube od Jirky Pudila.
Ahoj, díky za snahu.
Nakonec stačilo a to uz zařídí relativně pěknou URL (resp skoro stejnou, akorát bych ?do věcí …)
// https://naja.js.org/#/history?id=history-mode
$this->presenter->payload->postGet = TRUE;
$this->presenter->payload->url = $this->link('this');