Author: jmorliaguet Date: Sat Mar 11 10:48:11 2006 New Revision: 2576 Modified: cpsskins/branches/jmo-perspectives/ui/framework/cpsskins.js Log:
- simplifications: the controllers associated to a view get registered when the view/widget is (re)displayed. 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 Sat Mar 11 10:48:11 2006 @@ -504,33 +504,26 @@ CPSSkins.BehaviourController.prototype = Object.extend(new CPSSkins.Controller(), { register: function(view) { - var controller = this; var rules = this.def.rules; + var model = view.model; + var controller = this; + var info = {'model': model, 'view': view, 'controller': controller}; - CPSSkins.registerEventHandler("displayed", controller, function(event) { - var view = event.publisher; - var model = view.model; - var controller = event.controller; - var info = {'model': model, 'view': view, 'controller': controller}; - $H(rules).each(function(r) { - var selector = $$(r.key); - if (selector) { - $H(r.value).each(function(s) { - var event_name = s.key; - var handler_name = s.value; - var handler = CPSSkins._handlers[handler_name]; - selector.each(function(el) { - Event.observe(el, event_name, - handler.bindAsEventListener(info)); - }); - }) - } - }) - }); - - CPSSkins.subscribe("displayed", {'subscriber': controller, - 'publisher': view}); + $H(rules).each(function(r) { + var selector = $$(r.key); + if (selector) { + $H(r.value).each(function(s) { + var event_name = s.key; + var handler_name = s.value; + var handler = CPSSkins._handlers[handler_name]; + selector.each(function(el) { + Event.observe(el, event_name, + handler.bindAsEventListener(info)); + }); + }) + } + }) } }); @@ -567,7 +560,7 @@ CPSSkins.FocusObserver = Class.create(); CPSSkins.FocusObserver.prototype = Object.extend(new CPSSkins.Controller(), { - register: function(view) { + setup: function() { var controller = this; @@ -1461,6 +1454,12 @@ this.def = def; this.setup(); + + CPSSkins.registerEventHandler("displayed", this, function(event) { + var view = event.subscriber; + view.attachControllers(); + }); + CPSSkins.subscribe("displayed", {'subscriber': this}); }, hash: function() { @@ -1493,6 +1492,15 @@ return this.def.controllers || [] }, + attachControllers: function() { + var view = this; + var controllers_id = view.getControllers(); + controllers_id.each(function(c) { + var controller = CPSSkins.getControllerById(c); + if (controller) { controller.register(view); } + }); + }, + observe: function(model) { model.addObserver(this); this.model = model; @@ -1626,7 +1634,7 @@ var widget = CPSSkins.Canvas.createNode({ tag: "div", classes: "tooltip", - style: {position:"absolute", display:"none"} + style: {position: "absolute", display: "none"} }); return new CPSSkins.Tooltip(widget, def); }, @@ -1663,11 +1671,6 @@ CPSSkins.registerEventHandler("loaded template", view, function(event) { var view = event.subscriber; view.reload(); - var controllers_id = view.getControllers(); - controllers_id.each(function(c) { - var controller = CPSSkins.getControllerById(c); - if (controller) { controller.register(view); } - }); CPSSkins.unsubscribe("loaded template", {'scope': view.hash()}); }); @@ -1699,15 +1702,6 @@ CPSSkins.Panel.prototype = Object.extend(new CPSSkins.View(), { setup: function() { - CPSSkins.registerEventHandler("panel loaded", this, function(event) { - var view = event.subscriber; - var controllers_id = view.getControllers(); - controllers_id.each(function(c) { - var controller = CPSSkins.getControllerById(c); - if (controller) { controller.register(view); } - }); - }); - CPSSkins.subscribe("panel loaded", {'subscriber': this}); }, inspect: function() { @@ -1737,7 +1731,7 @@ var options = { onComplete: function() { CPSSkins._parse(widget); - CPSSkins.notify("panel loaded", {'subscriber': view}); + CPSSkins.notify("displayed", {'publisher': view}); } }; @@ -2106,7 +2100,7 @@ }, prepare: function() { - this.widget.moveTo({'x': this.mouseY + 20, 'y': this.mouseX}); + this.widget.moveTo({'x': this.mouseX, 'y': this.mouseY +10}); this.widget.fitInsideScreen(); }, -- http://lists.nuxeo.com/mailman/listinfo/z3lab-checkins