[Zope-dev] z3c.form: GroupForm and ModificationEvents

Martin Aspeli optilude+lists at gmail.com
Wed Jan 13 04:10:30 EST 2010


Michael Howitz wrote:
> Am 13.01.2010 um 06:08 schrieb Martin Aspeli:
>> Michael Howitz wrote:>>> Hi,
>>>
>>> it seems to me that z3c.form.group.GroupForm does not send
>>> enough ModificationEvents: only one event for the context of the
>>> GroupForm but not for each modified object in the groups.
>> -1 to this being default behaviour.
>>
>> IObjectModifiedEvent is fired from EditForms, not from forms in
>> general.
>
> GroupForm has an applyChanges method which send this event. The Group
> class collects some data for it in its applyChanges method.

Sure, but IIRC GroupForm is only really intended as a mixin. In any 
case, we shouldn't by default send IObjectModifiedEvents from something 
that isn't an edit form. Not all (group) forms are edit forms. And even 
for the EditForm scenario, most edit forms edit exactly one context. 
Your use case is very particular to your application.

> The refactoring needn't break the code in the wild by sending only
> one ModifiedEvent for each different context object being changed.
> When a group has the same context as the group form, I agree, there
> should not be two events.

That would still break code.

>>> In a project of mine I have the following situation: I have a
>>> folder with some contained objects. A GroupForm displays the
>>> schema fields of the folder and the ones of all contained
>>> objects. When I modify one of the fields of a contained object I
>>> would expect a ModifiedEvent for this object. (Is this a valid
>>> expectation?) But GroupForm sends only one ModifiedEvent for the
>>> Folder (context of the form). This is even wrong in my case. At
>>> least the ModifiedEvent-Subscriber in zope.dublincore can't
>>> handle this and wrongly marks only the folder as modified.
>>>
>>> Do I have a very special use case which should be handled inside
>>> my project? Or should I change GroupForm to send a ModifiedEvent
>>> for each modified object?
>> I think you should override the action handler and do this for
>> your project. I don't think it should be the default behaviour.
>
> I can do so. But am I the only one who edits more than one object in
> a GroupForm and might need this feature?

Perhaps. :)

I don't think you can generalise this anyway.

Martin

-- 
Author of `Professional Plone Development`, a book for developers who
want to work with Plone. See http://martinaspeli.net/plone-book



More information about the Zope-Dev mailing list