[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