[Checkins] SVN: Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/ got event attachment to fields working. It might be nice to have a simple view for rendering them.

Paul Carduner paulcarduner at gmail.com
Wed Jun 27 13:47:19 EDT 2007


Log message for revision 77152:
  got event attachment to fields working.  It might be nice to have a simple view for rendering them.

Changed:
  U   Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/jsevent.py
  U   Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/jsevent.txt
  U   Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/testing.py

-=-
Modified: Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/jsevent.py
===================================================================
--- Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/jsevent.py	2007-06-27 17:32:41 UTC (rev 77151)
+++ Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/jsevent.py	2007-06-27 17:47:18 UTC (rev 77152)
@@ -105,11 +105,22 @@
 
     def render(self):
         result = ''
+        #first render events attached to widgets
         for widget in filter(interfaces.IJSEventsWidget.providedBy,
                              self.form.widgets.values()):
             renderer = zope.component.getMultiAdapter((widget.jsEvents, self.request),
                                                      interfaces.IJSEventsRenderer)
             result += renderer.render(widget, self.form)
+        #render events attached to fields
+        if hasattr(self.form, 'jshandlers'):
+            for field in self.form.fields.values():
+                handler = self.form.jshandlers.getHandler(field)
+                if handler is not None:
+                    renderer = zope.component.getMultiAdapter((handler.event, self.request),
+                                                              interfaces.IJSEventRenderer)
+                    # XXX: is this a safe way to get ids?
+                    id = self.form.widgets[field.__name__].id
+                    result += renderer.render(handler, id, self.form) + '\n'
         return result
 
 

Modified: Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/jsevent.txt
===================================================================
--- Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/jsevent.txt	2007-06-27 17:32:41 UTC (rev 77151)
+++ Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/jsevent.txt	2007-06-27 17:47:18 UTC (rev 77152)
@@ -124,7 +124,6 @@
 Taking from the widget.txt file in z3c.form, we will set up a widget
 with its own widget template, et cetera, to work with.
 
-  >>> from z3c.form.testing import TestRequest
   >>> from z3c.form import widget
   >>> request = TestRequest()
   >>> age = widget.Widget(request)
@@ -249,25 +248,24 @@
 The above method is pretty ugly, and we would really prefer something
 like what is done with buttons.  So here is how it would work.
 
-#  >>> class PersonEditForm(form.AddForm):
-#  ...
-#  ...     fields = field.Fields(IPerson)
-#  ...
-#  ...     @jsevent.handler(fields['age'])
-#  ...     def ageClickEvent(self, form, id):
-#  ...         return 'alert("The Age was Clicked!");'
-#  ...
-#  ...     @jsevent.handler(fields['gender'], event=jsevent.CHANGE)
-#  ...     def genderChangeEvent(self, form, id):
-#  ...         return 'alert("The Gender was Changed!");'
-#
-#Now we can update this form and render the widget event handler.
-#
-#  >>> request = TestRequest()
-#  >>> edit = PersonEditForm(root, request)
-#  >>> edit.update()
+  >>> class PersonEditForm(form.AddForm):
+  ...
+  ...     fields = field.Fields(IPerson)
+  ...
+  ...     @jsevent.handler(fields['age'])
+  ...     def ageClickEvent(self, id):
+  ...         return 'alert("The Age was Clicked!");'
+  ...
+  ...     @jsevent.handler(fields['gender'], event=jsevent.CHANGE)
+  ...     def genderChangeEvent(self, id):
+  ...         return 'alert("The Gender was Changed!");'
 
-#  >>> zope.component.provideAdapter(jsevent.JSFormEventsRenderer)
-#  >>> print jsinterfaces.IJSFormEventsRenderer(edit).render()
-#  $("#form-widgets-gender").bind("change", function(){alert("The Gender was Changed!");});
-#  $("#form-widgets-age").bind("click", function(){alert("The Age was Clicked!");});
+Now we can update this form and render the widget event handler.
+
+  >>> request = TestRequest()
+  >>> edit = PersonEditForm(root, request)
+  >>> edit.update()
+  >>> zope.component.provideAdapter(jsevent.JSFormEventsRenderer)
+  >>> print jsinterfaces.IJSFormEventsRenderer(edit).render()
+  $("#form-widgets-gender").bind("change", function(){alert("The Gender was Changed!");});
+  $("#form-widgets-age").bind("click", function(){alert("The Age was Clicked!");});

Modified: Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/testing.py
===================================================================
--- Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/testing.py	2007-06-27 17:32:41 UTC (rev 77151)
+++ Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/testing.py	2007-06-27 17:47:18 UTC (rev 77152)
@@ -30,11 +30,12 @@
 from z3c.formjs import jsbutton, jswidget, jsevent
 from z3c.formjs import interfaces
 
-from z3c.form.interfaces import IWidget
+from z3c.form.interfaces import IWidget, IFormLayer
 import browser
 
 class TestRequest(TestRequest):
-    zope.interface.implements(jquery.layer.IJQueryJavaScriptBrowserLayer)
+    zope.interface.implements(jquery.layer.IJQueryJavaScriptBrowserLayer,
+                              IFormLayer)
 
 def getPath(filename):
     return os.path.join(os.path.dirname(browser.__file__), filename)



More information about the Checkins mailing list