Author: jmorliaguet Date: Sun Jan 29 16:31:13 2006 New Revision: 2239 Modified: cpsskins/branches/jmo-perspectives/ui/framework/cpsskins.js Log:
- observers were not registered / unregistered correctly. Modified: cpsskins/branches/jmo-perspectives/ui/framework/cpsskins.js ============================================================================== --- cpsskins/branches/jmo-perspectives/ui/framework/cpsskins.js (original) +++ cpsskins/branches/jmo-perspectives/ui/framework/cpsskins.js Sun Jan 29 16:31:13 2006 @@ -115,7 +115,9 @@ switch(classid) { case "model": { - CPSSkins.Models[name] = new CPSSkins.Model(el, def); + var model = new CPSSkins.Model(el, def); + model.id = index; + CPSSkins.Models[name] = model; break; } @@ -124,12 +126,23 @@ if (!(widget_type in Widgets)) { return; } + /* create the view */ var factory = Widgets[widget_type]; if (factory) { var view = factory(def); view.id = index; + + /* register observed models */ + var model_id = def.model; + if (model_id) { + var model = CPSSkins.getModelById(model_id); + view.observe(model); + } + + /* insert the widget into the DOM */ el.parentNode.insertBefore(view.widget, el); + /* registers views per perspective */ var perspectives = def.perspectives || []; $A(perspectives).each(function(p) { if (!p) return; @@ -557,9 +570,7 @@ addObserver: function(view) { var view_id = view.id; - if (!(view_id in this.observers)) { - this.observers[view_id] = view; - } + this.observers[view_id] = view; // create a back-reference view.model = this; // initialize the view @@ -567,7 +578,15 @@ }, removeObserver: function(view) { - //this.observers = this.observers.without(view); + var id = view.id; + var observers = $H({}); + this.observers.each(function(v) { + var key = v[0]; + if (key != id) { + observers[key] = v[1]; + } + }); + this.observers = observers; }, notifyObservers: function(data) { @@ -672,14 +691,6 @@ this.controller = null; } - var model_id = def.model; - if (model_id) { - this.model = CPSSkins.getModelById(model_id); - this.observe(this.model); - } else { - this.model = null; - } - this.show_effect = def.show_effect || {}; this.hide_effect = def.hide_effect || {}; -- http://lists.nuxeo.com/mailman/listinfo/z3lab-checkins