On 7/7/05, Martijn Faassen <[EMAIL PROTECTED]> wrote:
> I noticed another possible oddness with zc.page. When I subclass
> form.PageEditForm, I normally get an 'edit' action provided with it, as
> the baseclass defines this.

The base class provides two things:

- the implementation of the edit action, and

- the "registration" of the edit action in self.actions.

> If I however add my own actions in the subclass, like this:
> 
> @form.action("Another")
> def handle_another_action(self, action, data):
>      ...
> 
> the 'edit' action just disappears from the action list.

Well, the entire set of actions is replaced.

> Not daunted by this, I tried the following to restore the edit action:
> 
> @form.action("Edit")
> def handle_edit_action(self, action, data):
>      super(MyClass, self).handle_edit_action(action, data)
> 
> The 'Edit' button now appears in the form. Unfortunately submitting it
> using this button results in:
> 
> TypeError: 'Action' object is not callable

Interesting.

> Not giving up, I tried it another way, and placed this in the class,
> above the place where the extra action gets defined:
> 
>      actions = form.Actions(
>          form.Action("Edit", success="handle_edit_action"),
>          )
> 
> Unfortunately no luck either when I submit:
> 
>    File "/home/faassen/working/doclib/py/zc/page/form.py", line 735, in
> __call__
>      self.update()
>    File "/home/faassen/working/doclib/py/zc/page/form.py", line 715, in
> update
>      result = action.success(data)
>    File "/home/faassen/working/doclib/py/zc/page/form.py", line 567, in
> success
>      return self.success_handler(self.form, self, data)
>    File "/home/faassen/working/doclib/py/zc/page/form.py", line 507, in
> <lambda>
>      callable = lambda form, action, data: getattr(form, f)(action, data)
> TypeError: 'Action' object is not callable
> 
> Is this a bug?

That might be; I'll let Jim say for sure.

If you only want to add actions, what you can do in your view class is this:

    class MyForm(form.EditForm):

        actions = form.EditForm.actions[:]

        @form.action(_("Whatever"))
        def handle_whatever(self, action, data):
            pass


  -Fred

-- 
Fred L. Drake, Jr.    <fdrake at gmail.com>
Zope Corporation
_______________________________________________
Zope3-dev mailing list
Zope3-dev@zope.org
Unsub: http://mail.zope.org/mailman/options/zope3-dev/archive%40mail-archive.com

Reply via email to