FORM addError zobrazit prez AJAX
- vosy
- Člen | 532
ahoj mam formular a chtel bych aby mi vracel chybovae hlasky prez ajax
v JS mam:
$("form.ajax").on('click', "#frmnewForm-ulozit", function (payload)
{
// cl(payload);
$(this).ajaxSubmit(payload);
return false;
});
kdyz mam ve formulari
$form->addText('nazev', 'Název:')
->setRequired('Zadejte název značky.');
a znacku nezadam tak se spravne zobrazi ALERT okno s uvedenou hlaskou.
problem mam kdyz znacku vyplnim a chci zkontrolovat jestli znacka jiz neni v dtb.
public function defaultFormUlozit(MyForm $form)
{
$vals = $form->values;
$presenter = $form->getPresenter();
if(.....)
{
$form->addError('Znacka jiz existuje.');
tak se mi tato hlaska jiz nevrati ajaxem do ALERTmessage
jak??????
- akadlec
- Člen | 1326
Tak alert ti to v žádném případě nevrátí v tomto tvaru jak si uvedl. Buď to uděláš tak že si invaliduješ snippety s políčky formuláře a při chybě tam vykreslíš informaci a nebo si upravíš posílání FlashMessages či zpráv z formu aby se ti vložili do payloadu samostatně a v JS si je pak zpracuješ.
Příklad:
úprava posílání FM v presenteru:
abstract class BasePresenter extends \IPub\Application\UI\Presenter
{
/**
* Global before rendering actions
*/
protected function beforeRender()
{
parent::beforeRender();
// Get all flash messages and put them into array
$messages = array();
// Get all flash messages & put them into output array
foreach ($this->getTemplate()->flashes as $flash) {
$messages[] = array(
'type' => $flash->type,
'text' => $flash->message
);
}
// For ajax request...
if ( $this->isAjax() ) {
// ...store messages in payload
$this->payload->messages = $messages;
}
//...
}
}
zpracování v JS s pomocí nette.ajax.js a zobrazení pomocí pnotify:
/**
* Flash messages
*/
$.nette.ext('flashMessages', {
// Init system messages
init: function() {
// Disable messages history
$.pnotify.defaults.history = false;
},
// When request is done ...
success: function (payload) {
// ... show messages if are set
if ( payload.messages ) {
this.show(payload.messages);
}
}
},{
// Show messages from array
show: function(messages) {
// Display messages in growl
for(i in messages) {
// Get message type
switch (messages[i].type) {
// Notification
case 'note':
case 'information':
$.pnotify({
title : _TT["MSG_BOX_INFORMATIONS"],
text : messages[i].text,
type : "info",
styling : "bootstrap"
});
break;
// Error
case 'error':
$.pnotify({
title : _TT["MSG_BOX_ERROR"],
text : messages[i].text,
type : "error",
styling : "bootstrap"
});
break;
// Warning
case 'warning':
$.pnotify({
title : _TT["MSG_BOX_WARNING"],
text : messages[i].text,
type : "notice",
styling : "bootstrap"
});
break;
// Successful
case 'success':
$.pnotify({
title : _TT["MSG_BOX_OK"],
text : messages[i].text,
type : "success",
styling : "bootstrap"
});
break;
}
}
}
});
- honos
- Člen | 109
Nemělo by to řešit Nette samo, automaticky..?
Jinak:
akadlec napsal(a):
zpracování v JS s pomocí nette.ajax.js a zobrazení pomocí pnotify:
pnotify je asi plugin?