Hi!
In my opinion prototype.js is a good library. With it I learn more
javascript than in my whole life but I need to create another class to
work like I prefer
I would like to have a Ajax class that replace instead of update a container
Why?
I love something like this:
<div id=''List1'' class=''List''>
<div id=''Element1''
class=''Element''>
Element1
<a href="javascript: Ajax.Replacer(''Element1'',
''http://myserver/Edit/Element1'',
options)">Edit</a>
</div>
<div id=''Element2''
class=''Element''>
Element2
<a href="javascript: Ajax.Replacer(''Element2'',
''http://myserver/Edit/Element2'',
options)">Edit</a>
</div>
<div id=''Element3''
class=''Element''>
Element3
<a href="javascript: Ajax.Replacer(''Element3'',
''http://myserver/Edit/Element3'',
options)">Edit</a>
</div>
</div>
I would like to maintain the right structure :
List1
Element1
Element2
Element3
But I would like to change the Element1 div complete because I don''t
know what the server give to me
For these I create Ajax.Replacer a class that replace the container
gived complete
Now I don''t want that Sam or Thomas or anyone include these class at
prototype library (I only hope so) but I would like to know if I create
the class correctly or there are another better way to write it
Thanks!
PD: I have Ajax.Adder too to add content to a web (not update its
content). If you think you need it search Ajax.Replacer at my weblog
(http://blogs.sistes.net/Garito)
Ajax.Replacer
Ajax.Replacer = Class.create();
Object.extend(Object.extend(Ajax.Replacer.prototype,
Ajax.Request.prototype), {
initialize: function(container, url, options) {
this.containers = {
success: container.success ? $(container.success) : $(container),
failure: container.failure ? $(container.failure) :
(container.success ? null : $(container))
}
this.transport = Ajax.getTransport();
this.setOptions(options);
var onComplete = this.options.onComplete || Prototype.emptyFunction;
this.options.onComplete = (function(transport, object) {
this.replaceContent();
onComplete(transport, object);
}).bind(this);
this.request(url);
},
replaceContent: function() {
var receiver = this.responseIsSuccess() ?
this.containers.success : this.containers.failure;
var response = this.transport.responseText;
if (!this.options.evalScripts)
response = response.stripScripts();
if (receiver) {
if (this.options.insertion) {
new this.options.insertion(receiver, response);
} else {
var parent = receiver.parentNode
div =
parent.appendChild(document.createElement(''div''))
Element.update(div, response)
for(i = 0; div.childNodes.length; i++)
{
if(div.childNodes[i].nodeName != ''#text''
&&
div.childNodes[i].nodeName != ''META'') { break; }
}
parent.replaceChild(div.childNodes[i], receiver)
parent.removeChild(div)
setTimeout(function() {response.evalScripts()}, 10)
}
}
if (this.responseIsSuccess()) {
if (this.onComplete)
setTimeout(this.onComplete.bind(this), 10);
}
}
});
--
Mis Cosas
http://blogs.sistes.net/Garito/