class Umpirsky_AjaxForm extends Umpirsky_Form {
/**
* Render form and add ajax behaviour.
*
* @param Zend_View_Interface $view
* @return string
*/
public function render(Zend_View_Interface $view = null) {
$this->getView()->jQuery()->addOnLoad(sprintf('%s("#%s").uiForm();',
ZendX_JQuery_View_Helper_JQuery::getJQueryHandler(),
$this->getAttrib('id')
));
return parent::render($view);
}
}
uiForm is simple jQuery plugin
jQuery.fn.uiForm = function() {
var self = this;
this.ajaxForm({
dataType: 'json',
success: function(response) {
var errorContainer = self.find('.form-errors');
var successContainer = self.find('.success-box');
if (response.valid) {
// Remove error
errorContainer.remove();
self.find('[id$="_wrapper"]').removeClass('element-error');
// Add success
if (successContainer.size() > 0) {
successContainer.replaceWith(response.html);
} else {
self.prepend(response.html);
}
// Clear fields
self.clearForm();
} else {
// Remove success
successContainer.remove();
// Form errors
if (errorContainer.size() > 0) {
errorContainer.replaceWith(response.html);
} else {
self.prepend(response.html);
}
// Higlight elements
for (name in response.errors) {
if ($.isEmptyObject(response.errors[name])) {
$('#' + name + '_wrapper').removeClass('element-error');
} else {
$('#' + name + '_wrapper').addClass('element-error');
}
}
}
}
});
}
project specific, but you can use it as an example.
If form is not valid
$this->view->html = $form->renderFormErrors();
$this->view->errors = $form->getErrors();
plugin uses this thigs for generating markup.
Form action is set to be handled via ajaxContext, so you can add target action json context.
Regards,
Saša Stamenković
On Fri, Apr 2, 2010 at 4:24 PM, Bill Chmura <Bill@explosivo.com> wrote:
Okay, well the subject was a tough one to come up with so here is a better description:
I have a Zend_Form... When you call the controller it renders the zend form on the page and gives it to you.
You complete the zend form and JS packages it up and sends an Ajax request
The ajax request takes the data, creates the form, and validates, etc that way and sends the data back
Which then gets the data back and makes a pretty table.
So my question is, how do I pass back the validation errors via the AJAX response?
My thoughts currently are:
1) Screw the ajax, force a full page refresh each time
2) Render and pass the whole form back inside the response
3) Send back a validation error listing and parse it out in the client
#2 seems easiest, but I feel strange about it for some reason.
Anyone else tackle this before?
没有评论:
发表评论