Hi Norbert,
For customization I put every little bit in a wrapper
class
around the generated Magritte component. This is for customizing
the generated component as well as to do some manual html if
it isn't avoidable. I have the feeling that this is not the
right way to do but I have no better idea. To minimize the effort
to do a component for a model component I've built a base class
which should ease the customization of the component.
are your convenience classes available somewhere? I think that many
people could profit from these extensions and they could maybe even
be integrated somehow into the core package?
- really complex layout cases
I have one case where it is necessary to put css classes to some of
the components of a form. The best way I found so far (being dirty)
is to use propertyAt:put: at description level and use this in a
specialized renderer
You could use #attributes of the descriptions:
aDescription attributes class: 'foo'
So far so good. I like to hear your oppions and
experiences doing this
kind of stuff.
Your approach sounds fine to me, I also found myself doing similar
things.
Another problem I have no solution til now is the
mixture of models
into
one component. Sometimes you build your data model and then page
layout
forces you to edit two objects at the same time. I have no problem to
mix descriptions in a desired way. But by invoking asComponentOn: they
would have all the same model which is wrong for a subset of the
descriptions. Is there any clever way to mix descriptions, set the
model
accordingly and then produce the component?
Indeed you can do that by modifying the accessors of the descriptions
of referenced objects. I am copying an example from an earlier post
to this mailing list, where #billingAddress and #shippingAddress are
weaved into the description of anOrder:
composedDescription := anOrder description copy
addAll: (anOrder billingAddress description collect: [ :each |
each copy accessor: (MACascadeAccessor
accessor: (MASelectorAccessor selector: #billingAddress)
next: each accessor) ]);
addAll: (anOrder shippingAddress description collect: [ :each |
each copy accessor: (MACascadeAccessor
accessor: (MASelectorAccessor selector: #shippingAddress)
next: each accessor) ]);
asComponentOn: anOrder
This looks terribly complicated, but with a simple helper function it
could made look much simpler.
Cheers,
Lukas
--
Lukas Renggli
http://www.lukas-renggli.ch