Author: jmorliaguet
Date: Sun Feb  5 17:41:23 2006
New Revision: 2300

Modified:
   cpsskins/branches/jmo-perspectives/ui/framework/cpsskins.js
Log:

- the registration is event-based, in the following order:

  1. view 2. controller 3. model since:

  the "view" can refer to some "controller"
  the "view" can refer to some "model"



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 Feb  5 
17:41:23 2006
@@ -101,9 +101,14 @@
   notify: function(eventid, target) {
     var subscribers = CPSSkins.Subscribers[eventid];
     $A(subscribers).each(function(e) {
-      if (e.target == target) {
+      var event_target = e.target;
+      if (event_target == target || event_target == null) {
         var handler = CPSSkins.getEventHandler(eventid, e.subscriber);
-        if (handler) handler(e);
+        if (handler) {
+          // set the target in case no target is specified in the subscription.
+          e.target = target;
+          handler(e);
+        }
       }
     });
   },
@@ -143,7 +148,7 @@
   },
 
   parse: function(node) {
-    $A(["model", "controller", "view"]).each(function(type) {
+    $A(["view", "controller", "model"]).each(function(type) {
 
       var elements = node.getElementsByTagName("ins");
       $A(elements).each(function(el, index) {
@@ -185,7 +190,7 @@
         case "controller": {
           var controller = new CPSSkins.Controller(el, def);
           CPSSkins.Controllers[name] = controller;
-          CPSSkins.notify("registered", controller);
+          CPSSkins.notify("registered controller " + def.id, controller);
           break;
         }
 
@@ -193,7 +198,7 @@
           var model = new CPSSkins.Model(el, def);
           model.id = index;
           CPSSkins.Models[name] = model;
-          CPSSkins.notify("registered", model);
+          CPSSkins.notify("registered model " + def.id, model);
           break;
         }
 
@@ -208,18 +213,26 @@
             var view = factory(def);
             view.id = index;
 
-            /* register observed models */
+            /* register the observed model */
             var model_id = def.model;
             if (model_id) {
-              var model = CPSSkins.getModelById(model_id);
-              view.observe(model);
+              var evt_id = "registered model " + model_id;
+              CPSSkins.registerEventHandler(evt_id, view, function(event) {
+                var model = event.target;
+                view.observe(model);
+              });
+              CPSSkins.subscribe(evt_id, {'subscriber': view, 'target': null});
             }
 
             /* register the controller */
             var controller_id = def.controller || null;
             if (controller_id) {
-              var controller = CPSSkins.getControllerById(controller_id);
-              view.controller = controller;
+              var evt_id = "registered controller " + controller_id;
+              CPSSkins.registerEventHandler(evt_id, view, function(event) {
+                var controller = event.target;
+                view.controller = controller;
+              });
+              CPSSkins.subscribe(evt_id, {'subscriber': view, 'target': null});
             }
 
             /* insert the widget into the DOM */
-- 
http://lists.nuxeo.com/mailman/listinfo/z3lab-checkins

Reply via email to