Author: jmorliaguet Date: Tue May 9 21:28:46 2006 New Revision: 3091 Modified: cpsskins/branches/paris-sprint-2006/lib/cpsskins/src/cpsskins.js
Log: - unregister behaviour controllers Modified: cpsskins/branches/paris-sprint-2006/lib/cpsskins/src/cpsskins.js ============================================================================== --- cpsskins/branches/paris-sprint-2006/lib/cpsskins/src/cpsskins.js (original) +++ cpsskins/branches/paris-sprint-2006/lib/cpsskins/src/cpsskins.js Tue May 9 21:28:46 2006 @@ -532,6 +532,10 @@ CPSSkins.BehaviourController = Class.create(); CPSSkins.BehaviourController.prototype = Object.extend(new CPSSkins.Controller(), { + setup: function() { + this.handlers = {}; + }, + register: function(view) { var controller = this; var rules = this.def.rules; @@ -539,15 +543,17 @@ var controller = this; var info = {'model': model, 'view': view, 'controller': controller}; + var handlers = this.handlers; $H(rules).each(function(r) { var selector = $$(r.key); - if (selector) { + if (selector.length > 0) { $H(r.value).each(function(s) { var event_name = s.key; var action_id = s.value; var handler = CPSSkins.getAction(action_id); + handlers[action_id] = handler.bindAsEventListener(info) selector.each(function(el) { - Event.observe(el, event_name, handler.bindAsEventListener(info)); + Event.observe(el, event_name, handler); }); }) } @@ -555,6 +561,22 @@ }, unregister: function(view) { + var rules = this.def.rules; + + var handlers = this.handlers; + $H(rules).each(function(r) { + var selector = $$(r.key); + if (selector.length > 0) { + $H(r.value).each(function(s) { + var event_name = s.key; + var action_id = s.value; + var handler = handlers[action_id]; + selector.each(function(el) { + Event.stopObserving(el, event_name, handler); + }); + }) + } + }) } }); -- http://lists.nuxeo.com/mailman/listinfo/z3lab-checkins