[Checkins] SVN: z3c.formjs/trunk/src/z3c/formjs/jsclientevent. got roughly working server to client event propagation.

Paul Carduner paulcarduner at gmail.com
Sun Aug 19 23:12:58 EDT 2007


Log message for revision 79007:
  got roughly working server to client event propagation.

Changed:
  U   z3c.formjs/trunk/src/z3c/formjs/jsclientevent.py
  U   z3c.formjs/trunk/src/z3c/formjs/jsclientevent.txt

-=-
Modified: z3c.formjs/trunk/src/z3c/formjs/jsclientevent.py
===================================================================
--- z3c.formjs/trunk/src/z3c/formjs/jsclientevent.py	2007-08-20 01:45:32 UTC (rev 79006)
+++ z3c.formjs/trunk/src/z3c/formjs/jsclientevent.py	2007-08-20 03:12:57 UTC (rev 79007)
@@ -45,7 +45,7 @@
 
     def getHandlers(self, event):
         """See interfaces.IClientEventHandlers"""
-        return self._registry.subscribers((event.object, event), None)
+        return self._registry.subscribers((event.object, event), interfaces.IClientEventHandler)
 
     def copy(self):
         """See interfaces.IClientEventHandlers"""
@@ -64,7 +64,7 @@
         return handlers
 
     def __repr__(self):
-        return '<Handlers %r>' %[handler for required, handler in self._handlers]
+        return '<ClientEventHandlers %r>' %[handler for required, handler in self._handlers]
 
 
 class ClientEventHandler(object):
@@ -118,15 +118,21 @@
 class ClientEventsForm(object):
     """Mixin class to support calling of client side events."""
 
+    jsClientListeners = ClientEventHandlers()
+
     @property
     def eventCalls(self):
         events = self.request.annotations.get(CLIENT_EVENT_REQUEST_KEY, [])
-        listeners = getattr(self, 'jsClientListeners', None)
-        if listeners is None:
-            return []
         result = []
         for event in events:
-            import pdb; pdb.set_trace()
-            if listeners.getHandlers(event):
+            if self.jsClientListeners.getHandlers(event):
                 result.append(event)
         return result
+
+    @property
+    def eventInjections(self):
+        results = []
+        for event in self.eventCalls:
+            results += self.jsClientListeners.getHandlers(event)
+        results = '\n'.join(results)
+        return results

Modified: z3c.formjs/trunk/src/z3c/formjs/jsclientevent.txt
===================================================================
--- z3c.formjs/trunk/src/z3c/formjs/jsclientevent.txt	2007-08-20 01:45:32 UTC (rev 79006)
+++ z3c.formjs/trunk/src/z3c/formjs/jsclientevent.txt	2007-08-20 03:12:57 UTC (rev 79007)
@@ -45,7 +45,7 @@
 ``jsClientListeners`` attribute, which is now available on the view class itself.
 
   >>> View.jsClientListeners
-  <Handlers
+  <ClientEventHandlers
      [<ClientEventHandler for (<InterfaceClass zope.lifecycleevent.interfaces.IObjectModifiedEvent>,)>]>
 
 Server Side Listeners
@@ -96,10 +96,9 @@
   ...                       form.EditForm):
   ...     fields = field.Fields(IArticle)
   ...
-  ...     @jsclientevent.listener((IObjectModifiedEvent,))
-  ...     def alertModifiedEvent(self, data):
-  ...         return ('alert("You modified the object.\ndata: "'
-  ...                 ' + data + "\nPlease reload the page."')
+  ...     @jsclientevent.listener((IArticle, IObjectModifiedEvent,))
+  ...     def alertModifiedEvent(self, event):
+  ...         return 'alert("This event occured: %s");' % event
 
 Now we will instantiate the form and modify the object.
 
@@ -139,6 +138,14 @@
   [<zope.app.event.objectevent.ObjectModifiedEvent object at ...>,
    <zope.app.event.objectevent.ObjectEvent object at ...>]
 
-But this still does not show up in the eventCalls.
+But this still does not show up in the eventCalls, as there is no
+handler registered for it.
 
-  >>> form.eventCalls
\ No newline at end of file
+  >>> form.eventCalls
+  [<zope.app.event.objectevent.ObjectModifiedEvent object at ...>]
+
+Now we can get all the javascript that needs to be injected into the
+dom from the ``eventInjections`` attribute.
+
+  >>> print form.eventInjections
+  alert("This event occured: <zope.app.event.objectevent.ObjectModifiedEvent object at ...>");



More information about the Checkins mailing list