nette forms a „please wait loading“
- ondrusu
- Člen | 118
Ahoj, opět se obracím s dotazem sem.
Nevím jak inteligentně vyřešit aby při odeslání formuláře v nette
forms se zobrazil
„please wait loading“.
Mám formulář …
public function createComponentAddMeetingLogForm() {
$form = new Form();
$form->addProtection();
$form->addHidden('type');
$form->addHidden('mid');
$form->addText('name');
$form->addTextArea('description');
$form->addUpload('file_1')
->addRule(Form::MAX_FILE_SIZE, 'Maximum size file is ' . $this->util_services->getMaxSizePost() . '.', $this->util_services->getMaxSizePostBytes());
$form->onSuccess[] = array($this, "addMeetingLogFormSucceeded");
return $form;
}
A nevím jak při odeslání zobrazit loading.
Jinde v projektu to mám řešené přes tenhle plugin. Takhle jsem si nějak udělal funkce v js.
function pleaseWaitStart() {
$('body').pleaseWait();
}
function pleaseWaitStop() {
$('body').pleaseWait('stop');
}
Neřešili jste to někdo? Nebo nemá to už nette forms vyřešeno nějak?
Budu rád za každou odpověď, díky moc.
- Michal Hlávka
- Člen | 190
MW napsal(a):
Třeba..
v addMeetingLofFormSucceeded si invaliduj nějaký snippet
... $this->redrawControl('plswait'); ...
a v šabloně budeš mít
{snippet plswait} <script> $('body').pleaseWait(); </script> {/snippet}
On to chce behem odeslani zobrazit, tvoje by se zobrazilo az by se prave na nic necekalo :-). Navic by se tvoje varianta zobrazovala vzdy, protoze si tam nechranis kdy se zobrazit ma a kdy ne.
Na tohle jsem jednou delal pull request https://github.com/…etteForms.js#L207, kdy jsem pozadoval pridat druhy paramter do validovani formulare. Muzes na form zavesit udalost onSubmit kdy valideForm zkontroluje pouze, jestli je formular validni, pokud je, necha ho odeslat a zaroven zavola pleaseWait metodu. Pri ziskani odpovedi serveru, muzes invalidovat snippet, odchytit ze ze serveru prisel a wait stopnout, teda za predpokladu, ze odesilas formular ajaxem.
Editoval emptywall (11. 10. 2016 16:30)
- Michal Hlávka
- Člen | 190
ondrusu napsal(a):
Díky za odpoveď.
Koukám na to … Bohužel se to dělá POSTem.
Tak to asi jediný způsob je to navázat na ten POST že?
Dá se to nějak udělat?
No pokud formular odesilas POST metodou, je to jednodussi. Je brzo rano a ja jeste nemel svoji kavu, ale muzes to udelat v takovem smyslu.
...form onsubmit="wait(this)"...
function wait(form) {
if (Nette.validateForm(form, true)) {
$('body').pleaseWait();
return true;
} else {
Nette.validateForm(form, false); // timto si nejsem jistej jestli musim spoustet, je to kvuli tomu, aby ti vyskocili alerty u formulare, pokud neprosla validace
}
}
- MW
- Člen | 626
On to chce behem odeslani zobrazit, tvoje by se zobrazilo az by se prave na nic necekalo :-). Navic by se tvoje varianta zobrazovala vzdy, protoze si tam nechranis kdy se zobrazit ma a kdy ne.
No pokud by to volal na zacatku v addMeetingLofFormSucceeded pak provadel akce dle potřeby a pak stejnym zpusobem zase zavrel, tak by to asi splnilo ucel, alespoň tak jsem to pochopil a podobnym zpusobem resim i praci s modalnimi okny :)
Editoval MW (14. 10. 2016 10:28)
- ondrusu
- Člen | 118
MW: tvoje řešení jsem nezkoušel, díky za tvůj čas a zajímavý příspěvek, vyřešil jsem to jak psal EmptyWall
function wait(form) {
if (Nette.validateForm(form, true)) {
$('body').pleaseWait();
return true;
} else {
Nette.validateForm(form, false); // timto si nejsem jistej jestli musim spoustet, je to kvuli tomu, aby ti vyskocili alerty u formulare, pokud neprosla validace
}
}
Díky všem :)