AHAH (Asynchronous HTML and HTTP) and Plone
Recently I have tried working with AHAH along with Plone and found myself reaping the benefits of AJAX and the Zope framework. And what impressed me the most is that I wrote very little JavaScript.
I am going to run through an example of using AHAH with Controller Page Templates.
eg: form.cpt
<html>
<head>
<script language="JavaScript" type="text/javascript"
xsrc="MochiKit.js" mce_src="MochiKit.js" ></script>
<script language="JavaScript" type="text/javascript">
function LoadManager() {
bindMethods(this);
}
LoadManager.prototype.postFormData = function(theform) {
var data = {}
for (var i in theform.elements) {
var formelement = theform.elements[i];
data[formelement.name] = formelement.value;
}
var d = doSimpleXMLHttpRequest(theform.action, data);
d.addCallback(this.updateDOM);
d.addErrback(this.fetchError);
}
LoadManager.prototype.updateDOM = function(dom) {
var text = dom.responseText;
this.div.innerHTML=text;
}
LoadManager.prototype.fetchError = function(err) {
alert(err);
}
function postForm(theform, replacediv) {
loadManager = new LoadManager();
loadManager.div = $(replacediv);
loadManager.postFormData(theform);
}
</script>
</head>
<body>
This text will not reload on form submission.
<div id="reloadme">
<div metal:use-macro="here/comment_form/macros/view">
</div>
</body>
</html>
eg: form.cpt.metadata
[default]
title=Reply to Comment
[validators]
validators..Save = validate_comment
[actions]
action.success = traverse_to:string:comment_reply
action.success..Save = traverse_to:string:comment_reply
action.failure = traverse_to:string:comment_form
eg: comment_form.cpt
<metal:block use-macro="here/global_defines/macros/defines" />
<div metal:define-macro="view">
<form action="" method="post"
tal:define="errors options/state/getErrors">
<input type="hidden" name="form.submitted" value="1" />
<div class="field"
tal:define="error python:errors.get('comment', None)"
tal:attributes="class python:test(error, 'field error', 'field')">
<label for="title" i18n:translate="label_subject">Comment</label>
<div tal:content="error">Validation error output</div>
<input name="comment"
id="comment"
value=""
tabindex=""
tal:attributes="value request/comment|nothing;tabindex tabindex/next" />
</div>
</div>
<input onClick="postForm(this.form, 'comments')"
tabindex=""
type="button"
value="Save"
name="form.button.Save" />
</form>
</div>
</metal:block>
You must ensure that the response after the form submission is only the contents that you replaced in you macro and not an entire HTML file.
Posted by giovani |
Comments (1)