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

Reply via email to