why wouldnt that behavior work? the newValue call is only being called
when rendered. so it ha a parent. Besides that what does overide
add/remove gain you? you then want to check there if it is the first
an last? Depending on the reuse of components (items) and if the data
(list) can change this could go wrong quickly.
On 9/29/07, Sam Hough <[EMAIL PROTECTED]> wrote:
>
> I'm full of cold so probably being very thick but that doesn't work for
> RepeatingView does it as it implies notification of objects being attached
> to a parent :( It looks very clever but I'm not having one of those "god
> that is so simple why didn't I think of that" moments... Have you been
> following the "remove final for add, remove, removeAll" etc thread? Seems
> like I could do a simple (if ugly) and efficient version that those changes.
> To add to the horror I've got my own add(int i, Component c) method , that
> igor didn't like, that I want to honour.
>
> Sorry if that sounds grumpy but I'm a miserable git when I've got a cold/man
> flu.
>
>
> Kent Tong wrote:
> >
> >
> > Sam Hough wrote:
> >>
> >> In my ignorance it seems tough to make that work the second time if the
> >> list has changed. It is also less pretty as the only extension points I
> >> have are renderIterator and renderChild. I can think of nasty hacks like
> >> using IdentityHashMap to hold onto Components I've already added an
> >> AttributeAppender (the HTML monkey is class happy) to...
> >>
> >
> > Try using a modifier like this:
> > private static class BoundHighlighter extends AttributeModifier {
> > private Component owner;
> >
> > public BoundHighlighter() {
> > super("class", true, null);
> > }
> > protected String newValue(String currentValue, String
> > replacementValue)
> > {
> > int idx = getItemIndex();
> > return idx == 0 ? "first" : (idx == getItemCount() - 1
> > ? "last"
> > : null);
> > }
> > public void bind(Component component) {
> > super.bind(component);
> > this.owner = component;
> > }
> > private int getItemIndex() {
> > return getItem().getIndex();
> > }
> > private Item getItem() {
> > Component parent = owner.getParent();
> > while (!(parent instanceof Item)) {
> > parent = parent.getParent();
> > }
> > return (Item) parent;
> > }
> > private int getItemCount() {
> > return getItem().getParent().size();
> > }
> > }
> >
> > The code below uses it for a Label contained in a repeater Item:
> >
> > public Home() {
> > RefreshingView view = new RefreshingView("view") {
> > protected Iterator getItemModels() {
> > List<IModel> models = new ArrayList<IModel>();
> > int n = 2+new Random().nextInt(10);
> > for (int i = 0; i < n; i++) {
> > models.add(new Model(i));
> > }
> > return models.iterator();
> > }
> > protected void populateItem(Item item) {
> > item.add(new Label("label", item.getModel())
> > .add(new BoundHighlighter()));
> > }
> > };
> > add(view);
> > }
> >
>
> --
> View this message in context:
> http://www.nabble.com/Reach-into-a-component-to-change-XML-attribute-tf4527906.html#a12954716
> Sent from the Wicket - User mailing list archive at Nabble.com.
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]