2012-05-23 2 views
0

Я работаю с приложением, где мне нужно добавить наборы дочерних панелей к другим содержащим родительским панелям, которые являются частью страницы.Элементы компоновки калитки, которые добавляются через ретранслятор

Может быть от 1 до 3 родительских панелей за раз, а между родителями может быть в общей сложности 7 дочерних панелей.

У меня есть место, где все добавляется должным образом, но при попытке стилизовать эти панели, добавленные через ретранслятор калитки, ни один из моих обычных методов не работает.

Я попытался переопределить метод populateItem в ListView, как показано на: https://cwiki.apache.org/WICKET/listview-and-other-repeaters.html и https://cwiki.apache.org/WICKET/page-with-dynamic-components.html

 add(new ListView<ParentPanel>("parentPanels", panels) { 

     @Override 
     protected void populateItem(ListItem<ParentPanel> item) { 

      ParentPanel temp = (ParentPanel) item.getModelObject(); 

      temp.add(new AttributeAppender("class", new Model<String>("panelClass"), "")); 

      item.add(temp); 
     } 

    }); 

... или в разметке:

 <wicket:container wicket:id="listOfPanels"> 
      <wicket:panel wicket:id="panelClass"/> 
     </wicket:container> 

... или даже добавляя модификатор атрибута в конструктор добавляемой панели.

Все это, кажется, игнорируется. Я что-то пропустил? Если бы мне не приходилось подсчитывать количество и тип панелей, чтобы добавить это, это не проблема, но что делает использование повторителя, что удаляет стиль?

+1

Вы даже используете объект html, который отображается? (не уверен, что это даже допустимо?) следует игнорировать в последнем выходном HTML-файле, поэтому не имеет значения, измените ли вы его класс. Вы видите какие-либо изменения, если повторяющийся элемент является «реальным html» (div, ...)? –

+0

Не можете ли вы создать html для панели внутри панелей? Или вы пытаетесь применять разные классы в зависимости от положения ретранслятора? – bert

+0

Да, я применяю стили на основе логики, которую я использую при обработке элементов из ретранслятора. Корень моей проблемы состоял в том, что я определенно использовал неправильные теги. Прекрасно работает. =/ – AllSeeingSeer

ответ

0

Я не считаю, что панель в виде tepmlate для ListView является хорошей практикой. Это может быть более удобным

 add(new ListView<Object>("parentPanels", panels) { 

    @Override 
    protected void populateItem(ListItem<Object> item) { 

     ParentPanel temp = new ParentPanel("panelClass",item.getModelObject()); 
     //ParentPanel temp = (ParentPanel) item.getModelObject(); 

     temp.add(new AttributeAppender("class", new Model<String>("myPanel"), "")); 

     item.add(temp); 
    } 

}); 

попробовать Также в HTML, как этот

<div wicket:id="listOfPanels"> 
     <div wicket:id="panelClass"></div> 
    </div> 

Это будет генерироваться с классом CSS под названием MyPanel.

Также вам нужно добавить классы css в html вашей панели и ее компоненты.

+0

Спасибо, я использовал что-то вроде этого. Я не знал о лучшей практике для этой ситуации, в основном уходил с тех двух сайтов, которые я связал в исходном вопросе. И да, ядро ​​проблемы было html. – AllSeeingSeer

2

Добавить свой модификатор атрибута к элементу и прикрепить элемент к тегу html, который визуализируется как div вместо калитки: контейнер, который не отображается.

вы также можете добавить класс в подкласс Item и переопределить метод newItem() ретранслятора, чтобы вернуть свой собственный. см. пример OddEvenListItem.

+0

Да, никогда не думал проверять, что ... вроде просто вырезал и обработал примеры из этих сайтов для моих собственных нужд. Вернулся и обнаружил ошибку немного позже. Спасибо за ответ. – AllSeeingSeer

+0

Проверка OddEvenListItem дала мне достаточно, чтобы работать, спасибо! – Sonata

0
For simple styles, try something like following 

    item.add(new AttributeAppender("style", Model.of("padding-top:23px;padding-left:5px"))); 
Смежные вопросы