You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@wicket.apache.org by T P D <li...@diffenbach.org> on 2011/07/08 01:50:17 UTC
How can I encapsulate similar behavior yet varying markup?
I want to add several "collapsable" ListViews: a listview paired with a
button to toggle showing either the full list or the fist N elements.
But each listview's populateItem and corresponding markup will be different.
If I write a Wicket Panel, I'm not only "locked-in" to one set of markup.
I must also new up the ListView in the Panel's constructor, which means
I can't vary the code in ListView's overridden anonymous-class
populateItem, as I could if I passed in ListView instance.
MyPanel() {
add( new ListView("someid") {
void populateItem( ListItem i ) {
i.add( new Label("foo") ...
If I instead pass in the ListView, then any user of my Panel class can
pass in any instance or anonymous instance of ListView -- but my Panel
can't call listView.setId() on the already constructed ListView to make
its id match the id in the Panel's markup.
This seems like a simple thing, make two components collaborators and
make that reusable, but the only way to do it seems to be to write a
WebMarkupContainer-derived class, and pass in the ids, rather than
writing a Panel.
is there a simpler way I'm not seeing?
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org
Re: How can I encapsulate similar behavior yet varying markup?
Posted by Igor Vaynberg <ig...@gmail.com>.
a)
class mypanel extends panel {
mypanel () {
add(new listview() { onpopulateitem(item) {
mypanel.this.onpopulateitem(): }{});
}
protected abstract onpopulateitem(item);
}
b) instead of trying to encapsulate both the listview and the button
in the component make a reusable button
class listviewcollapsebutton extends button {
private listview view;
private boolean expanded=true;
onsubmit() { expanded=!expanded; if (expanded)
view.setitemsperpage(100); else {view.setitemsperpage(5);}
view.setcurrentpage(0); }
}
then its as easy as new listviewcollapsebutton("collapse", listview);
-igor
On Thu, Jul 7, 2011 at 4:50 PM, T P D <li...@diffenbach.org> wrote:
> I want to add several "collapsable" ListViews: a listview paired with a
> button to toggle showing either the full list or the fist N elements.
>
> But each listview's populateItem and corresponding markup will be different.
>
> If I write a Wicket Panel, I'm not only "locked-in" to one set of markup.
>
> I must also new up the ListView in the Panel's constructor, which means I
> can't vary the code in ListView's overridden anonymous-class populateItem,
> as I could if I passed in ListView instance.
>
> MyPanel() {
> add( new ListView("someid") {
> void populateItem( ListItem i ) {
> i.add( new Label("foo") ...
>
>
>
> If I instead pass in the ListView, then any user of my Panel class can pass
> in any instance or anonymous instance of ListView -- but my Panel can't call
> listView.setId() on the already constructed ListView to make its id match
> the id in the Panel's markup.
>
> This seems like a simple thing, make two components collaborators and make
> that reusable, but the only way to do it seems to be to write a
> WebMarkupContainer-derived class, and pass in the ids, rather than writing a
> Panel.
>
> is there a simpler way I'm not seeing?
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org