Diszkrét JavaScript update-elt tartalomra (prototype)
Prototype-al próbálok class-onként tulajdonságokkal felruházni elemeket. Az elemek eseménykezelőit az onLoad eseménykezelője rendeli az elemekhez, például a class="ajaxUpdater" osztályba tartozókhoz így:A gondom akkor van, ha az oldalon egy részt ajaxUpdater-rel lecserélek. Az új elemek eseménykezelőit hogy állítsam be? Próbáltam az onComplet esetén meghívni valami függvényt, ami elvégzi a hozzárendelést, de nem működik (onComplet: myUpdateLoader(this.element) { ... })? Hogy kellene ezt rendesen megcsinálni?
■ - Event.observe(window, 'load', myLoader, false);
- function myLoader(evt) {
- ...
- var AjaxUpdaterObject = Class.create();
- AjaxUpdaterObject.prototype = {
- initialize: function(element) {
- this.element = $(element);
- this.id = this.element.getAttribute('id');
- this.url = $F(this.id+'Url');
- this.myAjax = new Ajax.Updater(
- this.id,
- this.url,
- {
- method: this.element.getAttribute('method'),
- parameters: $F(this.id+'Pars'),
- }
- );
- }
- }
- var ajaxUpdaterElements = new Array();
- $$('.ajaxUpdater').each(
- function (elem, index) {
- ajaxUpdaterElements.push(new AjaxUpdaterObject(elem));
- }
- );
- }
onComplet???
Igen, elírás...
Igaziból az 'ujElemed' megtalálása volt a fő gondom, de közben rájöttem, hogy az Event.element-ből kiindulva meg tudom találni az érintett elemeket - bár még nem írtam meg, de gondolom menni fog (a $$ helyett az element.getElementsBySelector-ral, hogy csak az update-elt rész eseménykezelőit módosítsa).
Köszönöm!
delegálás
Így nem kell a dom módosítás után felprogramoznod egyesével az elemeket és ha jól csinálod, akkor elég 1 elemet felprogramozni, ráadásul ezáltal még gyorsabb is lehet a betöltődés.
Itt egy jó cikk és egy példa:
http://www.cherny.com/webdev/70/javascript-event-delegation-and-event-hanlders
Ez tényleg jó...