On 2 Mar 2008, at 16:13, Igor Vaynberg wrote:
On Sun, Mar 2, 2008 at 12:43 AM, John Patterson <[EMAIL PROTECTED]>
wrote:
On 2 Mar 2008, at 15:29, Igor Vaynberg wrote:
a) components need to know their ids, they use them to generate
markup id, etc.
it could be passed to child.render(id)
and to all the other 300 methods in Component that _may_ need it? it
doesnt scale...
If they may need it then the component could store it. Maybe onRender
() is not the place to set it but the earliest point that the parent
knows about it.
it is also a huge api break without a huge gain...
Enough said. I guess this is the cruncher.
b) it is a space optimization. an array of components each with
their
own id is cheaper on ram/serialization space then a map.
The field would just move from child to parent. Implementation
could
be just as efficient e.g. still using a single array to hold
children
but odd spaces are ids even spaces are children.
that will work
im sure i could come up with a few more, what is really the
advantage
of having put(id,component) ?
The advantage is being able to use constructor injection to compose
pages
first you have to realize that this is a corner case. doing
constructor injection with actual component instances is pretty rare.
I find myself wanting to do it quite often with side-bar panels that
contain a mix optional items
second, it is still possible. either using well known ids,
icomponentfactory { component create(string id);}, or wrapping passed
in components with something like:
class anypanel extends panel implements icomponentresolver {
public boolean resolve(final MarkupContainer container, final
MarkupStream markupStream,
final ComponentTag tag) {
if (container==this&&tag.getid().equals("_any_")) {
Component c=iterator().next();
c.render(markupStream);
return true;
}
return false;
}
}
<wicket:panel><div wicket:id="_any_"></div></wicket:panel>
then in your class
class mypage extends webpage {
public webpage(Component c1, Component c2) {
add(new anypanel("p1").add(c1));
add(new anypanel("p2").add(c2));
}
}
Thanks for the workaround. I'll give it a shot next time I am coding
pages.
John
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]